请求长度超过了最大限制。

1172

在我尝试上传视频到我的网站时,出现了Maximum request length exceeded的错误提示。

我该如何解决这个问题?

16个回答

2182

如果您使用IIS托管应用程序,则默认的上传文件大小为4MB。要增加它,请在web.config中使用下面的代码段 -

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="1048576" />
    </system.web>
</configuration>

对于 IIS7 及以上版本,您还需要添加以下行:

 <system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
   </security>
 </system.webServer>

注意:

  • maxRequestLength 的单位为千字节(KB)
  • maxAllowedContentLength 的单位为字节(B)

因此在这个配置示例中,两个值的差异是由于单位不同。(它们都等于1GB。)


7
谢谢Sachin,我添加了一些内容,例如 <httpRuntime maxRequestLength="32768" executionTimeout="180" />。 - Surya sasidhar
42
在使用IIS 7.5和VS RC 2012的IIS Express时,我必须同时设置这两个参数。httpRuntime参数用于配置ASP.NET的最大长度,而requestLimits参数用于配置IIS的最大长度。具体信息可以参考以下链接:https://dev59.com/P2w15IYBdhLWcg3w6f80 和 http://forums.iis.net/t/1169846.aspx。 - Despertar
14
请确保将此设置添加到主 Web.config 文件中,而不是位于 Views 文件夹内的文件。 - Serj Sagan
3
请将Karls回答中的“IMPORTANT: Both of these values must match. In this case, my max upload is 1024 megabytes.”包含进来,这样就可以解决问题了。 - Don Thomas Boyle
3
你的计算是用基比字节和吉比字节,需要更新回答了吗?呵呵。 - Rosdi Kasim
显示剩余13条评论

598

我认为这里没有提到,但要使其起作用,我必须在web.config中提供这两个值:

system.web

<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />

system.webServer

<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
</security>

重要提示:这两个值必须相匹配。在这种情况下,我的最大上传大小为1024兆字节。

maxRequestLength为1048576千字节,maxAllowedContentLength为1073741824字节

我知道这很明显,但很容易忽略。


5
针对任何相关人士:该回答同样适用于IIS-Express(使用WebMatrix的asp.net-webpages)。 - VoidKing
5
是的,这个答案对我有用,而不是Sachin的答案。它在Azure上也适用。 - Gautam Jain
5
这绝对是正确答案…两个条目都必须存在。在MVC 3的情况下,它可以在项目根目录下的 web.config 文件中找到。 - Miguel Angelo
2
另一个重要的事情是Karl提到的'executionTimeout'。 - Muhammad Amin
29
我需要将此内容与现有行进行组合:<httpRuntime targetFramework="4.5" maxRequestLength="1048576" executionTimeout="3600" /> - Ken Mc
显示剩余9条评论

219

值得注意的是,您可能希望将此更改限制为您期望用于上传的URL,而不是整个站点。

<location path="Documents/Upload">
  <system.web>
    <!-- 50MB in kilobytes, default is 4096 or 4MB-->
    <httpRuntime maxRequestLength="51200" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 50MB in bytes, default is 30000000 or approx. 28.6102 Mb-->
        <requestLimits maxAllowedContentLength="52428800" /> 
      </requestFiltering>
    </security>
  </system.webServer>
</location>

1
这将是与您上传操作设置对应的URL。在我的情况下,我有一个名为Upload的动作的Documents控制器,我将表单提交到该动作。在您的情况下,它将是您的操作的URL。 - Nick Albrecht
我还没有用WebAPI测试过它,但我没有理由认为它不能与之配合工作。 - Nick Albrecht
2
兄弟,你太棒了。抱歉,我的微小的点赞不足以表达我的敬意。 - Nicholas Petersen
这对我在WebAPI上起作用了,这是迄今为止最好的答案。 - m12lrpv
1
这将适用于WebAPI,包括MVC v5。一旦你使用ASP.NET Core和MVC Core,那么你应该为Kestrel设置不同的选项。 - Nick Albrecht
显示剩余5条评论

55

如果有人正在寻找处理此异常并向用户显示有意义解释的方法(例如“您正在上传一个太大的文件”),请参考以下内容:

而为了防止这种情况发生,你可以在上传前检查文件大小。

不过如果你已经收到了该错误信息,你可以尝试联系管理员或稍后再试。

Good luck!

//Global.asax
private void Application_Error(object sender, EventArgs e)
{
    var ex = Server.GetLastError();
    var httpException = ex as HttpException ?? ex.InnerException as HttpException;
    if(httpException == null) return;

    if (((System.Web.HttpException)httpException.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
    {
        //handle the error
        Response.Write("Too big a file, dude"); //for example
    }
}

(需要 ASP.NET 4 或更高版本)


1
maxAllowedContentLength 应该比 (maxRequestLength * 1024) 更高,以生成异常。 - Der_Meister
1
这篇文章给了我所需的内容,以便警告用户,但需要使用HttpContext.Current.ClearError()才能使Response.Redirect()正常工作。在web.config方面,它只与httpRuntimemaxRequestLength属性一起工作。 - nrod
可以通过在上传按钮上使用 onchange 事件并将上传文件大小与最大上传限制进行比较,在页面级别上使用JS执行文件大小验证和友好提示。 - Alfred Wallace
如果请求大于maxAllowedContentLength,似乎不会抛出此异常。在这种情况下,IIS似乎会在ASP被调用之前进行响应。因此需要将其设置得非常大。 - Garr Godfrey

32

默认情况下,最大请求大小为4MB (4096 KB)

详细说明可以在这里找到。

上述文章还解释了如何解决此问题 :)


4
该链接将我重定向到Microsoft支持首页。 - Bishop
1
也许出了些问题。链接重定向至这里 - gofr1

26
如果您无法更新配置文件但可以控制处理文件上传的代码,请使用HttpContext.Current.Request.GetBufferlessInputStream(true)disableMaxRequestLength参数中的true值告诉框架忽略配置的请求限制。
有关详细说明,请访问https://msdn.microsoft.com/zh-cn/library/hh195568(v=vs.110).aspx

太棒了,那么为什么最佳答案有超过1600票,而这个只有5票呢?这太棒了,因为通常我们只需要在一个单一的操作上使用它。此外,不会干扰其他设置等。 - Nicholas Petersen
这就是我一直在寻找的。 - Chris Catignani
正如帮助文件所描述的那样,您无法从 .aspx 页面使用此方法,这就是为什么。 - Ehsan Abidi

20

在web.config中有一个元素用于配置上传文件的最大大小:

<httpRuntime 
    maxRequestLength="1048576"
  />

19

总结所有答案到一个单独的位置:

<system.web>
  <httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
  </security>
</system.webServer>

规则:

  • maxRequestLength(以kb为单位)的值必须与maxAllowedContentLength(以字节为单位)相匹配。
  • 大多数情况下,您的system.web部分可能已经包含了一个“httpRuntime”。将您的targetFramework设置为您使用的.net版本。

注意事项:

  • maxRequestLength的默认值为4096(4mb)。最大值为2,147,483,647
  • maxAllowedContentLength的默认值为30,000,000(约为30mb)。最大值为4,294,967,295

更多信息请参见MSDN


这应该放在<configuration> </configuration>标签内,对吗? - S. B.
@S.B. 肯定的。 - BernieSF

10

maxRequestLength(以KB为单位的长度),这里以1024(1MB)为例。maxAllowedContentLength(以字节为单位的长度)应该与您的maxRequestLength相同(1048576字节=1MB)。

<system.web>
   <httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>

<system.webServer>
   <security>
      <requestFiltering>
          <requestLimits maxAllowedContentLength="1048576"/>
      </requestFiltering>
   </security>
</system.webServer>

6

这个问题困扰我多天了。 我修改了 Web.config 文件但没有起作用。 后来发现我的项目中有两个 Web.config 文件, 我应该修改在根目录下的那一个,而不是其他的。 希望对你有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接