Aplicación capaz de registrar el error en OnError, pero no podemos hacer ningún redireccionamiento para mostrar algo significativo al usuario. Alguna idea? Sé que podemos establecer maxRequestLength en web.config, pero de todos modos el usuario puede exceder este límite y es necesario mostrar algunos errores normales.ASP.NET: cómo mostrar una página de error al cargar un archivo grande (se excedió la longitud máxima de solicitud)?
Respuesta
Como dices, puedes configurar maxRequestLength en tu web.config (anulando los 4MB predeterminados de tu machine.config) y si se superan estos límites, normalmente obtienes un error HTTP 401.1.
Con el fin de manejar un error HTTP genérica a nivel de aplicación se puede configurar una sección de CustomError en su web.config dentro de la sección system.web:
<system.web>
<customErrors mode=On defaultRedirect=yourCustomErrorPage.aspx />
</system.web>
Cada vez que se mostró el error va a ser redirigido el usuario a su página de error personalizada.
Si desea una página especializada para cada error que puede hacer algo como:
<system.web>
<customErrors mode="On" defaultRedirect="yourCustomErrorPage.aspx">
<error statusCode="404" redirect="PageNotFound.aspx" />
</customErrors>
</system.web>
Y así sucesivamente.
De manera alternativa, podría editar la pestaña CustomErrors de las propiedades de su directorio virtual desde IIS para que apunte a su error al manejar las páginas de su elección.
Lo anterior no parece funcionar para 401.x errores - este artículo en código del proyecto explica una solución para un lo que parece ser un problema muy similar: Redirecting to custom 401 page
Puede verificar la longitud del archivo publicado (FileUpload.PostedFile.ContentLength), para ver si está por debajo del límite o no y simplemente muestra un mensaje de error amigable si es necesario.
No funciona - asp.net no puede llegar a este punto. – st78
Muy bien, eso es nuevo para mí, pensé que puedes verificar la longitud del contenido primero antes que decidir subir el archivo/rechazarlo. –
Gracias por la información, acabo de comprobarlo y falla. Es bueno saberlo ya que lo he usado antes y no me di cuenta de que hay un problema con él. –
Debería poder detectar el error en el controlador Global.asax - OnError(). Pero desafortunadamente, su solicitud inicial habrá finalizado y no podrá presentar la misma página de carga con alguna notificación de error al usuario.
Lo que puede hacer a lo sumo es mostrar una página de error amigable con cláusula de redireccionamiento simple dentro del controlador OnError() y en esa página tener algún enlace posterior o funcionalidad similar para devolver al usuario a la página donde desencadenó el error en primer lugar.
Actualización:
que tenía que poner en práctica verificación exacta sobre la carga de archivos recientemente y lo que ocurrió con SWFUpload es la biblioteca que se reunió totalmente mis necesidades y también tiene un montón de características adicionales. Lo usé junto con el envoltorio jquery proporcionado por Steve Sanderson. Más detalles se pueden encontrar here.
El punto es que el flash es capaz de detectar el tamaño del archivo en el lado del cliente y reaccionar adecuadamente si se cumple esta situación. Y creo que esto es exactamente lo que necesitas.
Además, puede implementar la detección de detección de flash si desea degradar con gracia al botón de carga nativa0 en caso de que el cliente no tenga instalado flash.
Es verdad, puedo detectar excepciones en OnError, sin embargo, Response.Redirect() no hace nada. – st78
Desafortunadamente, probablemente necesite IIS7 y atrape esto con un controlador personalizado, ya que IIS6 nunca llegará al nivel donde puede ver el tamaño del archivo. Solo puede saber el tamaño cuando se realiza la carga o si tiene un error.
Este es un problema conocido en ASP.NET. Otra alternativa (coja) es manejar esto antes en la solicitud y quizás usar un cargador basado en flash. John enlaces a varios en el siguiente enlace.
actualización: Jon Galloway parecía tener looked deeper into this problem y parece que un RIA-Registro es la única alternativa sensata, ya que IIS parece que siempre tiene que tragar el archivo y luego le dirá que es a grandes.
Nuestro servidor ejecuta IIS7, ¿puede proporcionar algún enlace/palabras clave donde buscar una respuesta sobre cómo superar este problema? – st78
Sergei,
por JohnIdol de respuesta, debe configurar una página de error personalizada para el código de estado . ej .:
<customErrors mode="On" defaultRedirect="~/Errors/Error.aspx">
<error statusCode="413" redirect="~/Errors/UploadError.aspx"/>
</customErrors>
sé porque tenía que resolver el mismo problema en un proyecto de cliente, y esta era la solución que funcionó para mí. Desafortunadamente, fue la única solución que encontré ... no fue posible detectar este problema en particular en el código; por ejemplo, verificar la longitud del archivo publicado como Snomag lo ha sugerido, o detectar un error en global.asax. Al igual que usted, también probé estos otros enfoques antes de llegar a una solución funcional. (De hecho, finalmente encontré esto en algún lugar de la web cuando estaba trabajando en mi problema).
Espero que ayude.
Extraño, obtengo el error 500 al 'Exceder la longitud máxima de solicitud'. –
La mejor forma de manejar grandes cargas es utilizar una solución que implemente un HttpModule que dividirá el archivo en fragmentos. Cualquiera de las soluciones pre-laminadas que se encuentran allí debería permitirle limitar el tamaño del archivo. Muchos otros han publicado enlaces a los que están en esta página, así que no me molestaré. Sin embargo, si no desea molestarse con que puede manejar esto en su aplicación Global.asax Application_Error evento. Si su aplicación es .NET 4.0, se adhieren este bloque de código en el que hay:
if (ex.InnerException != null && ex.InnerException.GetType() == typeof(HttpException) && ((HttpException)ex.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
//Handle and redirect here, you can use Server.ClearError() and Response.Redirect("FileTooBig.aspx") or whatever you choose
}
Si se está ejecutando en un marco anterior, probar el código aquí (está en VB, pero es fácil de traducir): http://www.webdeveloper.com/forum/showthread.php?t=52132
- 1. ERR_CONNECTION_RESET: la conexión se restableció al cargar un archivo grande
- 2. Hubo una excepción ejecutando las extensiones especificadas en el archivo de configuración. La longitud máxima de solicitud excedió
- 3. MVC3: longitud máxima de la solicitud superó
- 4. SSL recibió un registro que excedió la longitud máxima permitida. (Código de error: SSL_ERROR_RX_RECORD_TOO_LONG)
- 5. longitud máxima de la solicitud HTTP GET?
- 6. ¿Tiempo de espera al cargar un archivo grande?
- 7. ¿Cómo puedo resolver la excepción de "longitud de solicitud máxima excedida"?
- 8. JSON problema Longitud máxima con ASP.NET
- 9. ¿Cómo puedo cargar un archivo a través de ASP.NET MVC y mostrar una barra de progreso?
- 10. carga máxima longitud
- 11. dojo.io.iframe error al cargar un archivo
- 12. Limitación del navegador con longitud de página máxima
- 13. Longitud máxima de la propiedad FormsAuthenticationTicket.UserData
- 14. Cómo establecer la longitud de url permitida para una solicitud de nginx (código de error: 414, uri demasiado grande)
- 15. Longitud máxima de un openID
- 16. ¿Cómo se accede al error de origen, al archivo de origen y al número de línea de una excepción para usar en una página de error personalizada?
- 17. ¿Cuál es la longitud máxima de una cadena en PHP?
- 18. La solicitud excedió el límite de 10 redirecciones internas debido a un probable error de configuración.
- 19. longitud máxima del nombre del archivo
- 20. Tiempo de espera de Heroku al cargar un archivo grande a s3
- 21. Longitud máxima de byte []?
- 22. Función Python para tapar una cadena a una longitud máxima
- 23. La cuota máxima de longitud de contenido de cadena (8192)
- 24. Longitud de solicitud máxima excedida excepción en la devolución de datos
- 25. Carga de archivo grande en asp.net MVC
- 26. ¿Cómo aumentar la longitud máxima de la url?
- 27. ¿Cuál es la longitud máxima de una consulta mongodb?
- 28. Cadena grande dividida en líneas con longitud máxima en java
- 29. ASP.NET MVC: cómo mostrar un error no autorizado en la página de inicio de sesión?
- 30. ¿Longitud máxima de la cadena de consulta en una solicitud AJAX GET?
Gracias, esta es una guía completa sobre el manejo de errores, termino exactamente con la misma pieza de xml. Sin embargo, esto no ayuda al caso cuando se excede la longitud de la solicitud. – st78
Consulte la última edición y avíseme si se le ocurre algo – JohnIdol
Para aquellos que vienen a esta página y no saben cómo configurar maxRequestLength: [MSDN] (http://msdn.microsoft.com/en-us/ library/e1f13641.aspx) –