使用 MVC4 Web-API 的文件上传表单:出现错误 101 (net::ERR_CONNECTION_RESET):连接已重置。错误

Posted

技术标签:

【中文标题】使用 MVC4 Web-API 的文件上传表单:出现错误 101 (net::ERR_CONNECTION_RESET):连接已重置。错误【英文标题】:File upload form with MVC4 Web-API: Getting Error 101 (net::ERR_CONNECTION_RESET): The connection was reset. Error 【发布时间】:2013-01-20 18:05:04 【问题描述】:

我在尝试使用 VS2010 访问 MVC4 Web-API 应用程序中的控制器操作时收到网页不可用错误。我正在尝试上传一个小型(小于 1MB)的 pdf 文档,创建一个 byte[] 以传递给另一个服务。但是,我无法进入我的普通控制器或我的 api 控制器。我的应用程序有效,所有视图/部分/等。除了这个(带有文件上传表单的页面)之外,都显示得很好。这个视图是一个强类型的局部视图。

我尝试使用此处显示的方法:Upload a file MVC 4 Web API .NET 4 以及此处:http://blogs.msdn.com/b/henrikn/archive/2012/03/01/file-upload-and-asp-net-web-api.aspx,但它们都不起作用,因为我的操作属性找不到我的操作。无论我放 api/Documents 还是 Home/api/Documents 都行不通。所以我放弃了,回到我的 html 助手 beginform,希望它会以这种方式找到它......但它没有。因此,在放弃了花哨的 web-api 东西(无法异步工作)之后,我想我只是去老学校并通过表格传递文件,但我得到了同样的错误。我也尝试过重新创建页面,调整我的 httphandlers,运行时调整,路由和 apiroutes,我完全不知所措。请帮忙!

我的用户界面:

我的错误:

我的表格:

    <div class="tab-pane" id="addDoc">
        @using (Html.BeginForm("AddDocument", "Documents", FormMethod.Post, new  @class = "form-horizontal", @enctype = "multipart/form-data" ))
        
            <label class="control-label" for="newFile">Upload : </label>
            <input name="newFile" type="file" />
            <input type="submit" value="Submit" class="btn btn-success"/>
        
    </div>

我的 API 控制器: 我知道这没有意义,但我有一个断点来查看它是否甚至到达这里,它没有......

    [HttpPost]
    public AddDocumentResponse AddDocument(HttpPostedFileBase newFile)
    
        AddDocumentResponse response = new AddDocumentResponse();
        return response;
    

我的普通控制器动作:

    [HttpPost]
    public ActionResult AddDocument(HttpPostedFileBase newFile)
    
        return View("DevNotes");
    

我的 WebApiConfig:

    public static void Register(HttpConfiguration config)
    
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "Home/api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );
    

我的路由配置:

    public static void RegisterRoutes(RouteCollection routes)
    
        routes.IgnoreRoute("resource.axd/*pathInfo");

        routes.MapRoute(
            name: "Default",
            url: "controller/action/id",
            defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional 
        );

        routes.MapRoute(
            name: "Default2",
            url: "Home/controller/action/id",
            defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional 
        );
    

我的 WebConfig 的一部分:

    <httpHandlers>
       <add path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler, dotless.Core" />
    </httpHandlers>
    <httpRuntime executionTimeout="99009" maxRequestLength="2097151"/>

【问题讨论】:

【参考方案1】:

由于安装了 Fiddler,我有时会遇到同样的错误。当它被配置为作为代理启动时,它会更改您的 LAN 配置,因此它可以作为代理工作,有时系统在没有 Fiddler 的情况下将无法工作。希望这会有所帮助。

【讨论】:

【参考方案2】:

我认为....在

@using (Html.BeginForm(

                    "AddDocument", //Action

                    "Documents",  // Controller (only controller name not 
                                   accept in web api route you written constant 
                                  string as ( Home/api/ then controller name) 
                                  so write like that...)

//这里你写你的URL想去哪里而不是“文档”

// 如果你想要 web api 配置 ===> 写“Home/api/Documents”

// 如果你想在 Route Config ===> for 1st "Docunment" for 2nd "Home/Document"

                    FormMethod.Post, 
                    new  @class = "form-horizontal",
                          @enctype = "multipart/form-data" ))
       

在您的错误页面中,将 URL 视为 /Index/AddDocument....这是错误的方式.... 所以检查 URL 是否正确,并给出正确的控制器名称和操作作为 在路由文件中定义....

【讨论】:

【参考方案3】:

对我来说,问题出在 nginx 上:

http 
    client_max_body_size 0;

我将 client_max_body_size 设置为 0。默认为 1M。

来源:https://serverfault.com/a/401732

【讨论】:

以上是关于使用 MVC4 Web-API 的文件上传表单:出现错误 101 (net::ERR_CONNECTION_RESET):连接已重置。错误的主要内容,如果未能解决你的问题,请参考以下文章

通过在 MVC4 中多次单击按钮打开弹出窗口的问题?

MVC 4 剃刀文件上传

如何使用 MVC 4 上传大文件?

form里面文件上传并预览

使用 MVC 4 和 Ajax 上传文件

求C# MVC4 做的上传附件下载附件的功能 附件路径存在数据库中 附件存在项目下的uploading文件中 求源码