Tengo una página aspx donde estoy permitiendo que un usuario cargue un archivo y quiero limitar el tamaño máximo de carga del archivo a 10 MB. IIS7, .NET 3.5. Tengo el siguiente configurado en mi archivo web.config:¿Dónde puedo capturar y manejar maxAllowedContentLength excedido en IIS7?
<location path="foo.aspx">
<system.web>
<!-- maxRequestLength: kbytes, executionTimeout:seconds -->
<httpRuntime maxRequestLength="10240" executionTimeout="120" />
<authorization>
<allow roles="customRole"/>
<!-- Deny everyone else -->
<deny users="*"/>
</authorization>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength: bytes -->
<requestLimits maxAllowedContentLength="10240000"/>
</requestFiltering>
</security>
<handlers accessPolicy="Read, Script">
<add name="foo" path="foo.aspx" verb="POST"
type="System.Web.UI.PageHandlerFactory"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
que tienen un error personalizado módulo que implementa el manejo de IHttpModule
. Descubrí que cuando se excede el maxRequestLength
, HttpApplication.Error
se eleva. Sin embargo, cuando juego con maxAllowedContentLength
, el evento HttpApplication.Error
no se genera y el usuario se redirige a una página 404.13. Me he conectado con Visual Studio con excepciones de primera oportunidad activadas, no se lanza nada.
Mi primer pensamiento es verificar la longitud del contenido del encabezado en un evento anterior - ¿hay recomendaciones/mejores prácticas de dónde hago esto? PostLogRequest? EndRequest?
Tenga en cuenta que la respuesta de sunflowerpower solo funciona si el modo de canal administrado está configurado como integrado. Al menos es por eso que experimenté – Marvin
Me doy cuenta de que esta solución no maneja la Autenticación correctamente. Cuando llamo a Server.Transfer, las rutinas de verificación de autenticación de la página de destino fallan porque la propiedad HttpContext.Current.User es NULL. No parece ser causada por borrar los encabezados, ya que sacar esa línea aún resulta en el problema. ¿Hay alguna forma de evitar esto? No es una solución de lo contrario. – Triynko
Pongo el código de error de @Triynko en su controlador de eventos. Estoy usando Umbraco: no estoy seguro de si eso es significativo, pero este es el único lugar donde he podido detectar las excepciones de "Máxima longitud de solicitud excedida". También tuve que llamar a 'Response.ClearContent();' para eliminar el YSOD. 'Application_Error' no se activa para esta excepción (aunque lo hace para RequestValidation) y no pude hacer que 'OnError' se active en un UserControl o Masterpage. No se pudo encontrar una página real. ;) –