超过了最大请求长度。


Answers:


1968

如果您使用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千字节为单位
  • maxAllowedContentLength字节为单位

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


7
谢谢sachin,我添加了类似<httpRuntime maxRequestLength =“ 32768” executionTimeout =“ 180” />的东西
Surya sasidhar 2010年

11
maxAllowedContentLength必须以字节为单位,而不是以千字节为单位,因此提供的示例不等效。
马修·夏普

33
对于IIS 7.5和VS RC 2012 IIS Express,我必须同时设置两者。httpRuntime配置ASP.NET的最大长度,而requestLimits配置IIS的最大长度stackoverflow.com/questions/6327452/…forums.iis.net/t/1169846.aspx
Despertar

18
再次指出,maxAllowedContentLength以字节为单位,而不是千字节。这两个值不应为相同的数字,因为它们不是相同的度量单位。
Pandincus 2012年

13
确保您将此设置添加到主文件夹中,Web.config而不是在Views文件夹中添加该设置
Serj Sagan

553

我认为这里没有提到它,但是要使其正常工作,我必须在web.config中提供以下两个值:

system.web

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

而在 system.webServer

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

重要说明:这两个值必须匹配。在这种情况下,我的最大上传大小为1024 MB。

maxRequestLength有1048576 KILOBYTES,maxAllowedContentLength有1073741824 BYTES

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


5
可能涉及到的任何问题:此答案也适用于IIS-Express(带有WebMatrix的
ASP.NET-

5
是的,这是对我有用的答案,而不是Sachin的答案。它也适用于Azure。
Gautam Jain

5
这绝对是正确答案……两个条目都必须存在。对于MVC 3,它可以位于项目根web.config文件中。
Miguel Angelo

2
另一个重要的事情是卡尔提到的“执行超时”
穆罕默德·阿敏

26
我必须将其与现有行结合使用:<httpRuntime targetFramework =“ 4.5” maxRequestLength =“ 1048576” executionTimeout =“ 3600” />
Ken Mc

195

可能值得注意的是,您可能希望将此更改限制为希望用于上传的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>

考虑位置的不错的解决方案。但是使用MVC(并因此使用路线)时是否存在位置路径?
Luuk Krijnen 2014年

1
这将是与您将上传操作设置为的路线相对应的URL。就我而言,我有一个Documents控制器,带有一个名为Upload的动作,该动作将表单发布到该控制器。在您的情况下,无论您执行的操作是什么网址。
Nick Albrecht 2014年

对于喜欢此答案的任何人,请参阅此
DontVoteMeDown 2015年

2
老兄你摇滚。抱歉,但是我的一点点投票还不够。
尼古拉斯·彼得森

1
它将与WebAPI一起使用,适用于MVC v5及更高版本。一旦用MVC Core打了ASP.NET Core,就应该为Kestrel设置不同的选项。
Nick Albrecht

44

并且以防万一有人在寻找一种方法来处理此异常并向用户显示有意义的解释(例如“您正在上传的文件太大”):

//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 '16

这篇文章给了我警告用户的内容,但HttpContext.Current.ClearError()它需要使之Response.Redirect()正常工作。就web.config其而言,仅适用于的maxRequestLength属性httpRuntime
nrod

可以通过JS在页面级别使用onchange上载按钮上的事件来完成文件大小验证和用户友好消息,并将上载文件大小与最大上载限制进行比较。
阿尔弗雷德·华莱士,

29

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

在这里解释。

上面的文章还介绍了如何解决此问题:)


4
该链接将我重定向到Microsoft支持主页
Bishop

1
也许出了点问题。链接在此处
gofr1 2016年

22

如果您无法更新配置文件,但可以控制处理文件上传的代码,请使用HttpContext.Current.Request.GetBufferlessInputStream(true)

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

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


真棒,那么头条回答如何> 1600票,而只有5票?这真是太棒了,因为通常,这只是我们希望执行的单个操作。此外,请勿与其他设置混为一谈
Nicholas Petersen

这就是我想要的。
克里斯·卡蒂尼亚尼

20

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

<httpRuntime 
    maxRequestLength="1048576"
  />

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)。最大值是2,147,483,647
  • maxAllowedContentLength的默认值为30,000,000(大约30mb)。最大值是4,294,967,295

更多信息MSDN


8

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文件,我应该修改ROOT目录中的一个,而不是其他文件。希望这会有所帮助。


5

如果您有请求前往站点中的应用程序,请确保在根web.config中设置maxRequestLength。应用程序的web.config中的maxRequestLength似乎被忽略了。


如果我可以多次投票,我会。这浪费了我一整天。如果您有虚拟dir子应用程序,则必须在根级别(而不是子应用程序级别)将httpRuntime maxRequestLength="###requestLimits maxAllowedContentLength放在Web配置中。
nickvans

1

我的web.config文件包含多个system.web部分,这让我感到震惊:当我在配置级别将<httpRuntime maxRequestLength =“ 1048576” />添加到system.web部分时,它起作用了。


1

我必须编辑C:\Windows\System32\inetsrv\config\applicationHost.config文件并添加<requestLimits maxAllowedContentLength="1073741824" />到...的末尾。

<configuration>
    <system.webServer>
        <security>
            <requestFiltering>

部分。

根据此Microsoft支持文章


您自己项目中的web.config应该覆盖这些内容,因此我看不到需要进行修改applicationHost.config
bvgheluwe

-3

我可以添加到未编译的配置网站

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>

1
executionTimeout属性与询问的内容无关,compilation标签也无关。
Mathias Lykkegaard Lorenzen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.