使用 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):连接已重置。错误的主要内容,如果未能解决你的问题,请参考以下文章