Przekroczono maksymalną długość żądania.


1049

Występuje błąd Przekroczono maksymalną długość żądania, gdy próbuję przesłać film wideo na mojej stronie.

Jak to naprawić?

Odpowiedzi:


1969

Jeśli używasz usług IIS do hostowania aplikacji, domyślny rozmiar przesyłanego pliku to 4 MB. Aby go zwiększyć, skorzystaj z poniższej sekcji w swoim web.config-

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

W przypadku IIS7 i nowszych wersji należy również dodać poniższe wiersze:

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

Uwaga :

  • maxRequestLengthjest mierzony w kilobajtach
  • maxAllowedContentLengthjest mierzony w bajtach

dlatego wartości różnią się w tym przykładzie konfiguracji. (Oba są równoważne 1 GB.)


7
Dziękuję sachin i dodałem coś takiego, jak <httpRuntime maxRequestLength = "32768" wykonaniaTimeout = "180" />
Surya sasidhar

11
maxAllowedContentLength musi być w bajtach, a nie w kilobajtach, więc podane przykłady nie są równoważne.
Matthew Sharpe

33
Zarówno w IIS 7.5, jak i VS RC 2012 IIS Express musiałem ustawić OBIE Z nich. HttpRuntime jeden konfiguruje maksymalną długość ASP.NET, podczas gdy requestLimits konfiguruje maksymalną długość IIS, stackoverflow.com/questions/6327452/... i forums.iis.net/t/1169846.aspx
Despertar

18
Warto ponownie podkreślić, że maxAllowedContentLength jest w bajtach, a nie w kilobajtach. Dwie wartości nie powinny być tej samej liczby, ponieważ nie są one tą samą jednostką miary.
Pandincus,

13
Upewnij się, że dodajesz to ustawienie do głównego Web.configzamiast do tego w Viewsfolderze
Serj Sagan

553

Nie sądzę, żeby zostało tu wspomniane, ale aby to zadziałało, musiałem podać obie te wartości w pliku web.config:

W system.web

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

I w system.webServer

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

WAŻNE : obie wartości muszą się zgadzać. W takim przypadku moje maksymalne przesyłanie to 1024 megabajty.

maxRequestLength ma 1048576 KILOBYTES , a maxAllowedContentLength ma 1073741824 BYTES .

Wiem, że to oczywiste, ale łatwo to przeoczyć.


5
Dla każdego może to dotyczyć: Ta odpowiedź działa również doskonale dla IIS-Express (strony asp.net z WebMatrix)
VoidKing

5
Tak, to była odpowiedź, która zadziałała dla mnie zamiast odpowiedzi Sachina. Działa również na platformie Azure.
Gautam Jain

5
To zdecydowanie poprawna odpowiedź ... oba wpisy muszą być obecne. W przypadku MVC 3 może znajdować się w głównym katalogu projektu web.config.
Miguel Angelo

2
Inną ważną rzeczą jest „wykonanie Timeout”, o którym wspomina Karl
Muhammad Amin,

26
Musiałem połączyć to z istniejącą linią dla: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" wykonaniaTimeout = "3600" />
Ken Mc

195

Warto zauważyć, że możesz ograniczyć tę zmianę do adresu URL, który ma być używany do przesyłania, a nie do całej witryny.

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

Ładne rozwiązanie z myślą o lokalizacji. Ale czy istnieje ścieżka lokalizacji podczas pracy z MVC (a zatem i pracy z trasami)?
Luuk Krijnen,

1
Będzie to adres URL odpowiadający trasie, na którą ustawione jest działanie przesyłania. W moim przypadku mam kontroler dokumentów z działaniem o nazwie Prześlij, do którego przesyłam formularz. W twoim przypadku będzie to dowolny adres URL twojego działania.
Nick Albrecht,

Dla każdego, kto lubi tę odpowiedź, zobacz to .
DontVoteMeDown,

2
Koleś, ty rock. Przepraszam, ale mój mały głos nie był wystarczający.
Nicholas Petersen

1
Będzie to działać z WebAPI do MVC v5 włącznie. Gdy trafisz ASP.NET Core za pomocą MVC Core, musisz ustawić różne opcje dla Kestrel.
Nick Albrecht,

44

I na wypadek, gdyby ktoś szukał sposobu na poradzenie sobie z tym wyjątkiem i przedstawienie użytkownikowi znaczącego wyjaśnienia (coś w rodzaju „Przesyłasz plik, który jest zbyt duży”):

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

(Wymagany ASP.NET 4 lub nowszy)


1
maxAllowedContentLength powinna być wyższa niż (maxRequestLength * 1024) dla wygenerowania wyjątku.
Der_Meister

Ten post dał mi to, czego potrzebowałem, aby ostrzec użytkownika, ale HttpContext.Current.ClearError()był potrzebny, aby umożliwić Response.Redirect()prawidłowe działanie. Pod względem działania web.configdziała tylko z maxRequestLengthatrybutem httpRuntime.
nrod

Sprawdzanie poprawności rozmiaru pliku i komunikat przyjazny dla użytkownika można wykonać za pomocą JS na poziomie strony, używając onchangezdarzenia na przycisku przesyłania i porównując rozmiar pliku do przesłania z maksymalnym limitem przesyłania.
Alfred Wallace

29

Maksymalny rozmiar żądania to domyślnie 4MB (4096 KB)

Wyjaśniono to tutaj .

Powyższy artykuł wyjaśnia również, jak rozwiązać ten problem :)


4
Link przekierowuje mnie na stronę główną wsparcia Microsoft
Bishop

1
Może coś było nie tak. Link przekierowuje tutaj
gofr1

22

Jeśli nie możesz zaktualizować plików konfiguracyjnych, ale kontrolować kod, który obsługuje przesyłanie plików, użyj HttpContext.Current.Request.GetBufferlessInputStream(true).

trueWartość dla disableMaxRequestLengthparametru opowiada ramy ignorować skonfigurowane limity zgłoszeń.

Szczegółowy opis znajduje się na stronie https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx


NIESAMOWITE, więc jak najlepsza odpowiedź ma> 1600 głosów, a to tylko 5? To wspaniałe, ponieważ tak często chcemy tylko jednego działania. Ponadto, bez bałaganu z innymi ustawieniami itp.
Nicholas Petersen

Właśnie tego szukałem.
Chris Catignani,

20

W pliku web.config znajduje się element służący do konfigurowania maksymalnego rozmiaru przesyłanego pliku:

<httpRuntime 
    maxRequestLength="1048576"
  />

11

Podsumowując wszystkie odpowiedzi w jednym miejscu:

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

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

Zasady:

  • Wartość maxRequestLength (wyrażona w kb) musi być zgodna z wartością maxAllowedContentLength (wyrażoną w bajtach).
  • przez większość czasu sekcja system.web może już zawierać „httpRuntime”. ustaw parametr targetFramework na używaną wersję .net.

Uwagi:

  • domyślna wartość parametru maxRequestLength to 4096 (4 MB). maksymalna wartość wynosi 2 147 483 647
  • wartość domyślna dla maxAllowedContentLength wynosi 30 000 000 (około 30 MB). maksymalna wartość to 4 294 967 295

więcej informacji MSDN


8

maxRequestLength (długość w KB) Tutaj jako przykład. Wziąłem 1024 (1 MB) maxAllowedContentLength (długość w bajtach) powinna być taka sama jak twoja maxRequestLength (1048576 bajtów = 1 MB).

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

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

6

Martwiło mnie to także od wielu dni. Zmodyfikowałem plik Web.config, ale nie działał. Okazało się, że w moim projekcie są dwa pliki Web.config i powinienem zmodyfikować jeden w katalogu ROOT , a nie inne. Mam nadzieję, że to byłoby pomocne.


5

Jeśli masz żądanie skierowane do aplikacji w witrynie, upewnij się, że ustawiłeś maxRequestLength w głównym pliku web.config. Parametr maxRequestLength w pliku web.config aplikacji wydaje się być ignorowany.


Gdybym mógł to głosować więcej niż raz, zrobiłbym to. To zmarnowało dzień mojego życia. Jeśli masz wirtualnego dir sub-aplikacji, trzeba umieścić httpRuntime maxRequestLength="###i requestLimits maxAllowedContentLengthw config WWW na poziomie głównym, a nie na poziomie sub-app.
nickvans

1

Byłem zaskoczony faktem, że nasz plik web.config ma wiele sekcji system.web: działało, gdy dodałem <httpRuntime maxRequestLength = "1048576" /> do sekcji system.web na poziomie konfiguracji.


1

Musiałem edytować C:\Windows\System32\inetsrv\config\applicationHost.configplik i dodać <requestLimits maxAllowedContentLength="1073741824" />na końcu ...

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

Sekcja.

Zgodnie z tym artykułem pomocy technicznej Microsoft


web.config z twojego projektu powinien je zastąpić, więc nie widzę potrzeby modyfikacji applicationHost.config.
bvgheluwe

-3

Mogę dodać do konfiguracji web nieskompilowanej

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

1
executionTimeoutAtrybut nie ma nic wspólnego z tym, co jest proszony, i nie robi compilationtag.
Mathias Lykkegaard Lorenzen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.