Limito el tamaño del archivo que los usuarios pueden cargar al sitio desde Web.config. Como se explica en here, debería arrojar una excepción ConfigurationErrorsException si no se acepta el tamaño. Traté de atraparlo desde el método de acción o el controlador para las solicitudes de carga, pero no tuve suerte. La conexión se restablece y no puedo mostrar una página de error.Cómo atrapar la excepción ConfigurationErrorsException por violar maxRequestLength?
Intenté detectarlo en el evento BeginRequest pero no importa lo que haga, la excepción no se ha manejado. Aquí está el código:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
try
{
if (context.Request.ContentLength > maxRequestLength)
{
IServiceProvider provider = (IServiceProvider)context;
HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
// Check if body contains data
if (workerRequest.HasEntityBody())
{
// get the total body length
int requestLength = workerRequest.GetTotalEntityBodyLength();
// Get the initial bytes loaded
int initialBytes = 0;
if (workerRequest.GetPreloadedEntityBody() != null)
initialBytes = workerRequest.GetPreloadedEntityBody().Length;
if (!workerRequest.IsEntireEntityBodyIsPreloaded())
{
byte[] buffer = new byte[512];
// Set the received bytes to initial bytes before start reading
int receivedBytes = initialBytes;
while (requestLength - receivedBytes >= initialBytes)
{
// Read another set of bytes
initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length);
// Update the received bytes
receivedBytes += initialBytes;
}
initialBytes = workerRequest.ReadEntityBody(buffer, requestLength - receivedBytes);
}
}
}
}
catch(HttpException)
{
context.Response.Redirect(this.Request.Url.LocalPath + "?action=exception");
}
}
Pero todavía sale esto:
Maximum request length exceeded.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Maximum request length exceeded.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Actualización:
¿Qué método plantea la excepción de todos modos? Si leo la solicitud, genera una excepción. Si no la leo en absoluto, obtengo "101 Connection Reset" en el navegador. ¿Qué se puede hacer aquí?
quería seguir su respuesta, busqué en Google y encontré esto: http://stackoverflow.com/questions/2966076/getting-file-size-in-javascript. De acuerdo con este tema, no hay una manera de averiguar el tamaño del archivo a través de Javascript simple (¡no quiero usar Flash, ActiveX o HTML 5!). ¿Lo estoy entendiendo correctamente? – celticharp
@necronio, creo que sí. –