【问题标题】:Maximum request length exceeded.超出最大请求长度。
【发布时间】:2011-04-20 16:57:00
【问题描述】:

当我尝试在我的网站上上传视频时,我收到了错误超出了最大请求长度

我该如何解决这个问题?

【问题讨论】:

    标签: asp.net iis file-upload


    【解决方案1】:

    如果您使用 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。)

    【讨论】:

    • 谢谢 sachin,我添加了一些类似
    • 对于 IIS 7.5 和 VS RC 2012 IIS Express,我必须同时设置这两个。 httpRuntime 配置 ASP.NET 的最大长度,而 requestLimits 配置 IIS 的最大长度,stackoverflow.com/questions/6327452/…forums.iis.net/t/1169846.aspx
    • 确保将此设置添加到主 Web.config 而不是 Views 文件夹中的设置
    • @SachinShanbhag 请包括IMPORTANT: Both of these values must match. In this case, my max upload is 1024 megabytes. 来自 Karls 的回答 以纠正此问题,然后就可以了。
    • 您的计算是以千字节和千兆字节为单位的,是时候更新答案了吗?呵呵。
    【解决方案2】:

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

    system.web

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

    system.webServer

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

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

    maxRequestLength 有 1048576 KILOBYTES,而 maxAllowedContentLength 有 1073741824 BYTES

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

    【讨论】:

    • 对于任何可能关注的问题:此答案也适用于 IIS-Express(带有 WebMatrix 的 asp.net-webpages)
    • 是的,这是对我有用的答案,而不是 Sachin 的答案。它也适用于 Azure。
    • 这绝对是正确的答案...两个条目都必须存在。在 MVC 3 的情况下,它可以在项目根 web.config 文件中。
    • 另一个重要的事情是 Karl 提到的 'executionTimeout'
    • 我必须将它与现有的行结合起来:
    【解决方案3】:

    值得注意的是,您可能希望将此更改限制为您希望用于上传的 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(因此使用路由)时是否有位置路径?
    • 这将是与您设置上传操作的路由相对应的 URL。就我而言,我有一个 Documents 控制器,其中包含一个名为 Upload 的操作,我将表单发布到该操作。在您的情况下,无论您的操作的网址是什么。
    • 对于任何喜欢这个答案的人,see this
    • 老兄,你摇滚。抱歉,我的小小的赞成票还不够。
    • 这将与 WebAPI 一起工作,包括 MVC v5。使用 MVC Core 访问 ASP.NET Core 后,您应该为 Kestrel 设置不同的选项。
    【解决方案4】:

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

    //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 或更高版本)

    【讨论】:

    • maxAllowedContentLength 应高于 (maxRequestLength * 1024) 以生成异常。
    • 这篇文章给了我警告用户所需的信息,但需要HttpContext.Current.ClearError() 才能让Response.Redirect() 正常工作。就web.config 而言,它只适用于httpRuntimemaxRequestLength 属性。
    • 如果请求大于maxAllowedContentLength,这似乎不会被抛出。在这种情况下,IIS 似乎会在调用 ASP 之前做出响应。所以需要设置这个非常大
    【解决方案5】:

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

    这是解释here

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

    【讨论】:

    • 链接将我重定向到微软支持主页
    • 可能出了点问题。链接重定向here
    【解决方案6】:

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

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

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

    【讨论】:

    • 太棒了,那么最佳答案怎么会有 > 1600 票,而这只有 5 票?这太棒了,因为很多时候,这只是我们想要的一个动作。此外,不要弄乱其他设置等。
    • 这就是我要找的。​​span>
    【解决方案7】:

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

    <httpRuntime 
        maxRequestLength="1048576"
      />
    

    【讨论】:

      【解决方案8】:

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

      <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

      【讨论】:

        【解决方案9】:

        maxRequestLength (长度以 KB 为单位) 这里作为 ex。我取了 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>
        

        【讨论】:

          【解决方案10】:

          这也困扰了我好几天。 我修改了 Web.config 文件,但没有用。 原来我的项目中有两个Web.config文件, 我应该修改 ROOT 目录中的那个,而不是其他的。 希望这会有所帮助。

          【讨论】:

            【解决方案11】:

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

            【讨论】:

            • 如果我能不止一次地支持这个,我会的。这浪费了我生命中的一天。如果您有虚拟目录子应用程序,则必须将 httpRuntime maxRequestLength="###requestLimits maxAllowedContentLength 放在根级别的 Web 配置中,而不是子应用级别。
            【解决方案12】:

            我们的 web.config 文件有多个 system.web 部分,这让我大吃一惊:当我在配置级别将 添加到 system.web 部分时,它起作用了。

            【讨论】:

              【解决方案13】:

              我必须编辑C:\Windows\System32\inetsrv\config\applicationHost.config 文件并将&lt;requestLimits maxAllowedContentLength="1073741824" /&gt; 添加到...的末尾...

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

              部分。

              根据This Microsoft Support Article

              【讨论】:

              • 您自己项目中的 web.config 应该覆盖这些,所以我认为不需要修改 applicationHost.config
              【解决方案14】:

              我正在处理同样的错误,并在花费时间后通过在 web.config 文件中添加以下行来解决它

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

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

              【讨论】:

                【解决方案15】:

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

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

                【讨论】:

                • executionTimeout 属性与询问的内容无关,compilation 标记也没有。
                猜你喜欢
                • 1970-01-01
                • 2015-11-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-10-04
                • 1970-01-01
                相关资源
                最近更新 更多