Recibo el error Se excedió la longitud máxima de la solicitud cuando intento cargar un video en mi sitio.
¿Cómo puedo solucionar esto?
Recibo el error Se excedió la longitud máxima de la solicitud cuando intento cargar un video en mi sitio.
¿Cómo puedo solucionar esto?
Respuestas:
Si está utilizando IIS para alojar su aplicación, el tamaño predeterminado del archivo de carga es de 4 MB. Para aumentarlo, utilice esta sección a continuación en su web.config
-
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
Para IIS7 y superior, también debe agregar las siguientes líneas:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Nota :
maxRequestLength
se mide en kilobytesmaxAllowedContentLength
se mide en bytes Es por eso que los valores difieren en este ejemplo de configuración. (Ambos equivalen a 1 GB).
Web.config
lugar de la que está dentro de la Views
carpeta
No creo que se haya mencionado aquí, pero para que esto funcione, tuve que proporcionar ambos valores en la web.config:
En system.web
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
Y en system.webServer
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
IMPORTANTE : Ambos valores deben coincidir. En este caso, mi carga máxima es de 1024 megabytes.
maxRequestLength tiene 1048576 KILOBYTES , y maxAllowedContentLength tiene 1073741824 BYTES .
Sé que es obvio, pero es fácil pasarlo por alto.
web.config
archivo raíz del proyecto .
Vale la pena señalar que es posible que desee limitar este cambio a la URL que espera utilizar para la carga en lugar de todo su sitio.
<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>
Y en caso de que alguien esté buscando una manera de manejar esta excepción y mostrar una explicación significativa al usuario (algo como "Estás cargando un archivo que es demasiado grande"):
//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
}
}
(Se requiere ASP.NET 4 o posterior)
HttpContext.Current.ClearError()
era necesario para permitir Response.Redirect()
que funcione correctamente. En términos de web.config
funciona solo con el maxRequestLength
atributo de httpRuntime
.
onchange
evento en el botón de carga y comparando el tamaño del archivo de carga con el límite máximo de carga.
Si no puede actualizar los archivos de configuración pero controla el código que maneja el uso de carga de archivos HttpContext.Current.Request.GetBufferlessInputStream(true)
.
El true
valor del disableMaxRequestLength
parámetro le dice al marco que ignore los límites de solicitud configurados.
Para obtener una descripción detallada, visite https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx
Para resumir todas las respuestas en un solo lugar:
<system.web>
<httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Reglas:
Notas:
más información MSDN
maxRequestLength (longitud en KB) Aquí como ej. Tomé 1024 (1 MB) maxAllowedContentLength (longitud en bytes) debería ser el mismo que su maxRequestLength (1048576 bytes = 1 MB).
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
</system.webServer>
Si tiene una solicitud que va a una aplicación en el sitio, asegúrese de configurar maxRequestLength en la raíz web.config. Parece que se ignora maxRequestLength en el archivo web.config de la aplicación.
httpRuntime maxRequestLength="###
y requestLimits maxAllowedContentLength
en un web.config en la raíz, no en el nivel sub-aplicación.
Me tropecé con el hecho de que nuestro archivo web.config tiene múltiples secciones system.web: funcionó cuando agregué <httpRuntime maxRequestLength = "1048576" /> a la sección system.web que en el nivel de configuración.
Tuve que editar el C:\Windows\System32\inetsrv\config\applicationHost.config
archivo y agregarlo <requestLimits maxAllowedContentLength="1073741824" />
al final del ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
sección.
applicationHost.config
.
Puedo agregar a la configuración web sin compilar
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
<compilation debug="true"/>
</system.web>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
executionTimeout
atributo no tiene nada que ver con lo que se solicita, y tampoco la compilation
etiqueta.