publicar net mvc enable deploy asp c# asp.net asp.net-mvc iis-7 iis-6

c# - enable - Mostrar página de error personalizada cuando la carga del archivo excede el tamaño permitido en ASP.NET MVC



publish asp.net web api to iis (4)

Mi principal problema es que quiero mostrar una página de error personalizada cuando un archivo cargado excede el tamaño permitido (maxRequestLength en web.config).

Cuando se carga el archivo grande, se emite una HttpException antes de que se invoque mi método de acción de carga en el controlador. Esto es lo esperado.

He intentado capturar la excepción en un atributo personalizado y también anular OnException en el controlador. ¿Por qué no es posible detectar la excepción en el atributo o en el método OnException?

Sin embargo, es posible detectar la excepción en Application_Error en global.asax, pero ni Response.Redirect ni Server.Transfer funcionan para redirigir a la página de error personalizada. Server.Transfer muestra el error "Error al procesar la solicitud secundaria" y response.redirect genera el error "Los encabezados HTTP ya enviados".

¿Algunas ideas?

¡Gracias por adelantado!

Marcus



Cuando se ejecuta bajo IIS7 y hacia arriba hay otro parámetro:

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

La configuración predeterminada es ligeramente inferior a 30 MB.

Para los archivos cargados con tamaño entre maxRequestLength y maxAllowedContentLength IIS7 emitirá una HttpException con el código HTTP 500 y el texto del mensaje Maximum request length exceeded . Cuando se lanza esta excepción, IIS7 mata la conexión inmediatamente. Por lo tanto, un HttpModule que redirige este error solo funcionará si la HttpException se maneja y borra (utilizando Server.ClearError() ) en Application_Error() en global.asax.cs.

Para archivos cargados con un tamaño mayor que maxAllowedContentLength IIS7 mostrará una página de error detallada con el código de error 404 y subStatusCode 13. La página de error se puede encontrar en C: / inetpub / custerr / en-US / 404-13.htm

Para las redirecciones de este error en IIS7, recomiendo la redirección en httpErrors . Para redirigir a una acción diferente, establezca un valor menor para maxAllowedContentLength que maxRequestLength en web.config y también agregue lo siguiente a web.config:

<system.webServer> <httpErrors errorMode="Custom" existingResponse="Replace"> <remove statusCode="404" subStatusCode="13" /> <error statusCode="404" subStatusCode="13" prefixLanguageFilePath="" path="http://yoursite.com/Error/UploadTooLarge" responseMode="Redirect" /> </httpErrors> </system.webServer>


El enlace de las vistas de velocidad fue realmente útil para resolver el problema. Como se dijo, el único inconveniente era que la solicitud completa (y el archivo) debe leerse antes de que se pueda realizar la redirección.

Pero se puede limitar para que se ejecute solo cuando la página donde está presente el control de carga del archivo se carga de esta manera

if (HttpContext.Current.Request.Url.ToString().Contains("UploadedPage.aspx") { //read and process page request }


Necesita crear un HttpHandler personalizado que lo haga por usted. ASP.NET eliminará automáticamente la conexión si el tamaño de la carga es demasiado grande (como lo descubrió).