Występuje błąd Przekroczono maksymalną długość żądania, gdy próbuję przesłać film wideo na mojej stronie.
Jak to naprawić?
Występuje błąd Przekroczono maksymalną długość żądania, gdy próbuję przesłać film wideo na mojej stronie.
Jak to naprawić?
Odpowiedzi:
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 :
maxRequestLength
jest mierzony w kilobajtachmaxAllowedContentLength
jest mierzony w bajtach dlatego wartości różnią się w tym przykładzie konfiguracji. (Oba są równoważne 1 GB.)
Web.config
zamiast do tego w Views
folderze
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ć.
web.config
.
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>
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)
HttpContext.Current.ClearError()
był potrzebny, aby umożliwić Response.Redirect()
prawidłowe działanie. Pod względem działania web.config
działa tylko z maxRequestLength
atrybutem httpRuntime
.
onchange
zdarzenia na przycisku przesyłania i porównując rozmiar pliku do przesłania z maksymalnym limitem przesyłania.
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)
.
true
Wartość dla disableMaxRequestLength
parametru 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
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:
Uwagi:
więcej informacji MSDN
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>
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.
httpRuntime maxRequestLength="###
i requestLimits maxAllowedContentLength
w config WWW na poziomie głównym, a nie na poziomie sub-app.
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.
Musiałem edytować C:\Windows\System32\inetsrv\config\applicationHost.config
plik i dodać <requestLimits maxAllowedContentLength="1073741824" />
na końcu ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
Sekcja.
applicationHost.config
.
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>
executionTimeout
Atrybut nie ma nic wspólnego z tym, co jest proszony, i nie robi compilation
tag.