Độ dài yêu cầu tối đa đã bị vượt quá.


1050

Tôi nhận được lỗi vượt quá độ dài yêu cầu tối đa khi tôi đang cố tải lên video trong trang web của mình.

Làm thế nào để tôi sửa lỗi này?

Câu trả lời:


1973

Nếu bạn đang sử dụng IIS để lưu trữ ứng dụng của mình, thì kích thước tệp tải lên mặc định là 4MB. Để tăng nó, vui lòng sử dụng phần bên dưới trong web.config-

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

Đối với IIS7 trở lên, bạn cũng cần thêm các dòng dưới đây:

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

Lưu ý :

  • maxRequestLengthđược đo bằng kilobyte
  • maxAllowedContentLengthđược đo bằng byte

đó là lý do tại sao các giá trị khác nhau trong ví dụ cấu hình này. (Cả hai đều tương đương với 1 GB.)


7
Cảm ơn bạn sachin và tôi đã thêm một số thứ như <httpR.78 maxRequestL wavel = "32768"
execTimeout

11
max ALLowedContentLpm phải bằng byte, không phải kilobyte, vì vậy các ví dụ được cung cấp không tương đương.
Matthew Sharpe

33
Với cả IIS 7.5 và VS RC 2012 IIS Express, tôi phải đặt cả hai thứ này. HttpR.78 one định cấu hình độ dài tối đa của ASP.NET trong khi requestLimits định cấu hình độ dài tối đa của IIS, stackoverflow.com/questions/6327452/ và các diễn đàn.iis.net / t / 1169846.aspx
Despertar

18
Một lần nữa, đáng để chỉ ra rằng max ALLowedContentLpm tính bằng byte, không phải kilobyte. Hai giá trị không được là cùng một số, vì chúng không phải là cùng một đơn vị đo.
Pandincus

13
Đảm bảo rằng bạn đang thêm cài đặt này vào chính Web.configthay vì cài đặt trong Viewsthư mục
Serj Sagan

553

Tôi không nghĩ rằng nó đã được đề cập ở đây, nhưng để nó hoạt động, tôi đã phải cung cấp cả hai giá trị này trong web.config:

Trong system.web

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

Và trong system.webServer

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

QUAN TRỌNG : Cả hai giá trị này phải phù hợp. Trong trường hợp này, tải lên tối đa của tôi là 1024 megabyte.

maxRequestLpm có 1048576 KILOBYTES và max ALLowedContentLpm có 1073741824 BYTES .

Tôi biết điều đó là hiển nhiên, nhưng nó dễ dàng bỏ qua.


5
Đối với bất kỳ vấn đề nào có thể quan tâm: Câu trả lời này cũng hoạt động hoàn hảo cho IIS-Express (trang web asp.net với WebMatrix)
VoidKing

5
Vâng, đây là câu trả lời phù hợp với tôi thay vì câu trả lời của Sachin. Nó cũng hoạt động trên Azure.
Gautam Jain

5
Đây chắc chắn là câu trả lời chính xác ... cả hai mục phải có mặt. Trong trường hợp của MVC 3, nó có thể nằm trong web.configtệp gốc của dự án .
Miguel Angelo

2
một điều quan trọng khác là 'execTimeout' mà Karl đề cập
Muhammad Amin

26
Tôi đã phải kết hợp điều này với một dòng hiện có cho: <httpR.78 targetFramework = "4.5" maxRequestL wavel = "1048576" execTimeout = "3600" />
Ken Mc

195

Có thể đáng lưu ý rằng bạn có thể muốn giới hạn thay đổi này đối với URL mà bạn mong đợi sẽ được sử dụng để tải lên thay vì toàn bộ trang web của bạn.

<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>

Giải pháp tốt đẹp suy nghĩ về vị trí. Nhưng có một đường dẫn vị trí khi làm việc với MVC (và do đó làm việc với các tuyến đường) không?
Luuk Krijnen

1
Đó sẽ là một URL tương ứng với tuyến đường mà bạn đã đặt hành động tải lên của mình. Trong trường hợp của tôi, tôi có một bộ điều khiển Tài liệu với một hành động gọi là Tải lên mà tôi gửi biểu mẫu lên. Trong trường hợp của bạn, đó sẽ là bất kỳ url nào cho hành động của bạn.
Nick Albrecht

Đối với bất cứ ai thích câu trả lời này, xem điều này .
DontVoteMeDown 7/1/2015

2
Anh bạn đá. Xin lỗi, nhưng phiếu bầu nhỏ bé của tôi không đủ.
Nicholas Petersen

1
Điều này sẽ hoạt động với WebAPI cho đến và bao gồm cả MVC v5. Khi bạn nhấn ASP.NET Core với MVC Core, sau đó có các tùy chọn khác nhau bạn nên đặt cho Kestrel.
Nick Albrecht

44

Và chỉ trong trường hợp ai đó đang tìm cách xử lý ngoại lệ này và hiển thị một lời giải thích có ý nghĩa cho người dùng (đại loại như "Bạn đang tải lên một tệp quá lớn"):

//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
    }
}

(Yêu cầu ASP.NET 4 trở lên)


1
max ALLowedContentLpm phải cao hơn (maxRequestLpm * 1024) cho thế hệ ngoại lệ.
Der_Meister

Bài đăng này đã cho tôi những gì tôi cần để cảnh báo người dùng nhưng HttpContext.Current.ClearError()cần thiết để cho phép Response.Redirect()hoạt động đúng. Về mặt web.confignó hoạt động chỉ với maxRequestLengththuộc tính của httpRuntime.
nrod

Xác thực kích thước tệp và thông báo thân thiện với người dùng có thể được thực hiện thông qua JS ở cấp độ trang bằng cách sử dụng một onchangesự kiện trên nút tải lên và so sánh kích thước tệp tải lên với giới hạn tải lên tối đa.
Alfred Wallace

29

Kích thước yêu cầu tối đa theo mặc định là 4MB (4096 KB)

Điều này được giải thích ở đây .

Bài viết trên cũng giải thích cách khắc phục vấn đề này :)


4
Liên kết đang chuyển hướng tôi đến trang chủ hỗ trợ microsoft
Giám mục

1
Có lẽ có gì đó không ổn. Liên kết chuyển hướng ở đây
gofr1

22

Nếu bạn không thể cập nhật tệp cấu hình nhưng kiểm soát mã xử lý tải lên tệp, hãy sử dụng HttpContext.Current.Request.GetBufferlessInputStream(true) .

Các truegiá trị chodisableMaxRequestLength tham số nói với khuôn khổ để bỏ qua giới hạn yêu cầu cấu hình.

Để biết mô tả chi tiết, hãy truy cập https://msdn.microsoft.com/en-us/l Library / hh195568 (v = vs.110) .aspx


TUYỆT VỜI, vậy làm thế nào để câu trả lời hàng đầu có> 1600 phiếu, và điều này chỉ có 5? Điều này thật tuyệt vời, vì thông thường, đó chỉ là một hành động duy nhất mà chúng tôi muốn thực hiện. Hơn nữa, không gây rối với các cài đặt khác, v.v.
Nicholas Petersen

Đây là những gì tôi đang tìm kiếm.
Chris Catignani

20

Có một phần tử trong web.config để định cấu hình kích thước tối đa của tệp được tải lên:

<httpRuntime 
    maxRequestLength="1048576"
  />

11

Để tóm tắt tất cả các câu trả lời ở một nơi duy nhất:

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

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

Quy tắc:

  • giá trị maxRequestLpm (tính bằng kb) phải khớp với max ALLowedContentL wavel (tính bằng byte).
  • hầu hết thời gian phần system.web của bạn có thể đã chứa "httpR.78". đặt targetFramework của bạn thành phiên bản .net được sử dụng.

Ghi chú:

  • giá trị mặc định cho maxRequestLpm là 4096 (4mb). giá trị tối đa là 2.147.483.647
  • giá trị mặc định cho max ALLowedContentLpm là 30.000.000 (khoảng 30mb). giá trị tối đa là 4.294.967.295

thêm thông tin MSDN


8

maxRequestLpm (length in KB) Ở đây là ex. Tôi đã lấy 1024 (1MB) max ALLowedContentLpm (chiều dài tính bằng byte) phải giống với maxRequestLpm của bạn (1048576 byte = 1MB).

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

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

6

Nó làm phiền tôi nhiều ngày quá. Tôi đã sửa đổi tệp Web.config nhưng nó không hoạt động. Hóa ra có hai tệp Web.config trong dự án của tôi và tôi nên sửa đổi tệp trong thư mục ROOT chứ không phải các tệp khác. Hy vọng điều này sẽ hữu ích.


5

Nếu bạn có một yêu cầu đến một ứng dụng trong trang web, hãy đảm bảo bạn đặt maxRequestLpm trong web.config gốc. MaxRequestLpm trong web.config của ứng dụng dường như bị bỏ qua.


Nếu tôi có thể nâng cao điều này hơn một lần tôi sẽ làm. Điều này lãng phí một ngày của cuộc đời tôi. Nếu bạn có một ứng dụng phụ dir ảo, bạn phải đặt httpRuntime maxRequestLength="###requestLimits maxAllowedContentLengthtrong cấu hình web ở cấp gốc, không phải ở cấp ứng dụng phụ.
nickvans 8/2/2017

1

Tôi đã bị vấp ngã bởi thực tế là tệp web.config của chúng tôi có nhiều phần system.web: nó hoạt động khi tôi thêm <httpR.78 maxRequestL wavel = "1048576" /> vào phần system.web ở mức cấu hình.


1

Tôi đã phải chỉnh sửa C:\Windows\System32\inetsrv\config\applicationHost.configtập tin và thêm <requestLimits maxAllowedContentLength="1073741824" />vào cuối ...

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

phần.

Theo Điều khoản Hỗ trợ này của Microsoft


web.config từ dự án của riêng bạn nên ghi đè lên các dự án này, vì vậy tôi không thấy cần phải sửa đổi applicationHost.config.
bvgheluwe

-3

Tôi có thể thêm vào cấu hình web không biên dịch

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

1
Các executionTimeoutthuộc tính không có gì để làm với những gì được yêu cầu, và cũng như thế với compilationthẻ.
Mathias Lykkegaard Lorenzen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.