我正在使用.Net WebApi构建应用程序。我有一个上传文件的端点,我已经设置了web.config,如下所示:
<httpRuntime targetFramework="4.5" maxRequestLength="300000" />
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="305000000" />
</requestFiltering>
</security>
目前,如果我上传的文件大于〜300Mb,则会返回404.13状态代码。但是,我想返回400而不是。我相信404本身就是在抛出它,因为无论我在代码中做什么,我都无法捕获异常。我已经尝试了以下内容:
实现ExceptionHandler:http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
实施Application_Error:Catching "Maximum request length exceeded"
实施Application_BeginRequest:http://geekswithblogs.net/sglima/archive/2011/09/20/how-to-handle-maximum-request-length-exceeded-exception.aspx
在try catch中围绕控制器激活器:http://blog.greatrexpectations.com/2013/05/15/exception-handling-for-web-api-controller-constructors/
在web.config中替换404.13错误:
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="13" />
<error statusCode="404" subStatusCode="13" path="/errors/filesize" responseMode="Redirect" />
</httpErrors>
实施DelegatingHandler:Exception Handling ASP.NET MVC Web API
似乎没有任何作用,我尝试在上述任何方法的开头设置断点,并且在抛出异常时它永远不会进入任何一个。
答案 0 :(得分:0)
您可以在Global.asax.cs中尝试:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (Request.ContentLength > N) // set the N to the maximum allowed value
{
Response.StatusCode = 400;
Response.End();
}
}
请注意ContentLength是指整个请求体长。如果这不起作用,请尝试使用Request.Headers [“Content-Length”]而不是Request.ContentLength(可能会计算请求完全到达服务器后的长度)。此外,您可以强制您的消费者为某些请求发送Content-Length标头,例如:
// your condition might be based on the request URI if you don't
// use a different Content-Type for your file upload method in web api
if (Request.Headers["Content-Type"] != null &&
Request.Headers["Content-Type"].StartsWith("multipart/form-data;"))
{
if(Request.Headers["Content-Length"] == null)
{
Response.StatusCode = 400;
Response.End();
}
}