关于asp.net:Maximum请求长度超出。

Maximum request length exceeded.

当我尝试在我的网站上载视频时,我得到的错误超过了最大请求长度。

我该怎么解决这个问题?


如果您使用IIS作为应用程序的宿主,则默认上载文件大小为4MB。要增加它,请使用web.config中的以下部分-

1
2
3
4
5
<configuration>
    <system.web>
        <httpRuntime maxRequestLength="1048576" />
    </system.web>
</configuration>

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

1
2
3
4
5
6
7
 <system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
   </security>
 </system.webServer>

注:

  • maxRequestLength以千字节为单位。
  • maxAllowedContentLength以字节为单位。

这就是为什么这个配置示例中的值不同。(两者都相当于1 GB)


我不认为这里提到过,但要使其工作,我必须在web.config中提供这两个值:

system.web

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

system.webServer

1
2
3
4
5
<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
</security>

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

maxrequestlength有1048576千字节,maxallowedcontentlength有1073741824字节。

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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
2
3
4
5
6
7
8
9
10
11
12
13
//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(httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge)
    {
        //handle the error
        Response.Write("Too big a file, dude"); //for example
    }
}

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


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

这里解释一下:http://support.microsoft.com/default.aspx?scid=kb;en-us;295626

上面的文章还解释了如何解决这个问题:)


web.config中有一个元素可以配置上载文件的最大大小:

1
2
3
<httpRuntime
    maxRequestLength="1048576"
  />


如果不能更新配置文件,但控制处理文件上载的代码,请使用HttpContext.Current.Request.GetBufferlessInputStream(true)

disableMaxRequestLength参数的true值告诉框架忽略配置的请求限制。

有关详细说明,请访问https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx


这里的maxrequestlength(以KB为单位)如我取了1024(1MB)maxallowedContentlength(以字节为单位的长度)应该与您的maxrequestlength(1048576字节=1MB)相同。

1
2
3
4
5
6
7
8
9
10
11
<system.web>
   <httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>

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

在一个地方总结所有答案:

1
2
3
4
5
6
7
8
9
10
11
<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)。最大值为2147483647
  • maxallowedContentLength的默认值为30000000(约30MB)。最大值为4294967295

更多信息MSDN


这也困扰了我好几天。我修改了web.config文件,但它不起作用。结果发现我的项目中有两个web.config文件,我应该修改根目录中的一个,而不是其他目录。希望这会有所帮助。


如果有一个请求要发送到站点中的应用程序,请确保在根web.config中设置maxrequestlength。应用程序web.config中的maxrequestlength似乎被忽略。


我不得不编辑C:\Windows\System32\inetsrv\config\applicationHost.config文件,并在……

1
2
3
4
<configuration>
    <system.webServer>
        <security>
            <requestFiltering>

部分。

根据此Microsoft支持文章


我被web.config文件有多个system.web节的事实绊倒了:当我将添加到配置级别的system.web节时,它起作用了。


我可以添加到配置Web未编译

1
2
3
4
5
6
7
8
9
<system.web>
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" />
  <compilation debug="true"/>
</system.web>
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="1048576"/>
  </requestFiltering>
</security>