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

时间:2013-02-05 17:57:49

标签: file-upload asp.net-mvc-4 asp.net-web-api interrupted-exception asp.net-web-api-routing

尝试使用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,我完全不知所措。请帮忙!

我的用户界面:

form with url 我的错误: Error

我的表格:

    <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 }
        );
    }

我的RouteConfig:

    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 }
        );
    }

My WebConfig的一部分:

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

3 个答案:

答案 0 :(得分:0)

由于安装了Fiddler,我有时会遇到同样的错误。当它配置为作为代理启动时,它会对您的LAN配置进行更改,因此它可以作为代理使用,有时如果没有Fiddler,系统将无法运行。希望这会有所帮助。

答案 1 :(得分:0)

我认为......在

@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...)

//在这里写下您想要去的网址,而不是“文档”

//如果你想要web api config ===&gt;写“Home / api / Documents”

//如果你想要在Route Config中===&gt; for 1st “Docunment”for 2nd “Home / Document”

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

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

答案 2 :(得分:0)

对我来说,问题在于nginx:

http {
    client_max_body_size 0;
}

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

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