WebApi 2 超出最大请求长度

Posted

技术标签:

【中文标题】WebApi 2 超出最大请求长度【英文标题】:WebApi 2 Maximum request length exceeded 【发布时间】:2015-10-04 18:27:40 【问题描述】:

有谁知道是否有办法捕捉到这个错误?

基本上我正在尝试实现一些功能,以允许用户将文件从网页上传到 webapi 控制器。

这工作正常,但如果文件大小超过 web.config 中指定的最大大小,服务器会返回 404 错误。

我希望能够拦截这个并返回一个 500 错误以及客户端可以使用的消息。

我无法确定在 WebApi 中的何处执行此操作,因为我在 Global.asax 中实现的 Application_Error 方法从未被命中,而且似乎 IIS 没有将其传递给 WebApi 应用程序。

【问题讨论】:

您需要增加允许的最大请求大小。看到这个答案:***.com/questions/288612/… 我已经这样做了,但我希望能够在超出此值的情况下捕获错误。 【参考方案1】:

尝试将 IIS 设置为接受 2GB 请求(以字节为单位)。

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483648" /> // 2GB
    </requestFiltering>
  </security>
</system.webServer>

并为 ASP.NET 应用程序设置合理的请求大小(以千字节为单位)。

<system.web>
  <httpRuntime maxRequestLength="4096" /> // 4MB (default)
</system.web>

现在 IIS 应该允许小于 2GB 的请求传递给您的应用程序,但应用程序将跳转到 Application_Error 达到 4MB 请求大小。在那里你可以管理你想要返回的东西。

无论如何,大于 2GB 的请求总是会被 IIS 返回 404.13。

相关链接:

Dealing with large files in ASP.NET Web API

【讨论】:

这篇文章对上述配置有一些额外的细节:***.com/a/40085473/152648【参考方案2】:

它在我的服务器上的样子:

<system.web>
<httpRuntime targetFramework="4.6.1" maxRequestLength="16240" />
</system.web>

【讨论】:

以上是关于WebApi 2 超出最大请求长度的主要内容,如果未能解决你的问题,请参考以下文章

.Net WebAPI+Jquery Ajax 请求参数

c# webapi post多个参数

WebApi 接口恶意请求限制

WebAPi性能

如何在 webapi 中配置 maxQueryStringLength?

超出最大请求长度