¿Cómo hago con el [HandleError]
filtro en asp.net MVC Preview 5?
Configuré customErrors en mi archivo Web.config
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
y pon [HandleError] encima de mi clase de controlador de esta manera:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Luego dejo que mis controladores hereden de esta clase y llamo a CrashTest () en ellos. Visual Studio se detiene ante el error y después de presionar f5 para continuar, me redirigen a Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest (donde sxi es el nombre del controlador usado. Por supuesto, no se puede encontrar la ruta y obtengo "Error del servidor en la aplicación '/'". 404.
Este sitio fue portado de la vista previa 3 a 5. Todo funciona (no fue mucho trabajo para portar) excepto el manejo de errores. Cuando creo un proyecto completamente nuevo, el manejo de errores parece funcionar.
Ideas?
--Nota--
Dado que esta pregunta tiene más de 3K vistas ahora, pensé que sería beneficioso poner lo que estoy usando actualmente (ASP.NET MVC 1.0). En el proyecto mvc contrib hay un atributo brillante llamado "RescueAttribute" Probablemente deberías comprobarlo también;)
fuente
RescueAttribute
fuente: mvccontrib.codeplex.com/SourceControl/changeset/view/…Respuestas:
Cuando solo proporciona el atributo HandleError a su clase (o su método de acción para el caso), cuando se produce una excepción no controlada, MVC buscará primero una Vista correspondiente denominada "Error" en la carpeta Vista del controlador. Si no puede encontrarlo allí, procederá a buscar en la carpeta Vista compartida (que debería tener un archivo Error.aspx de forma predeterminada)
También puede acumular atributos adicionales con información específica sobre el tipo de excepción que está buscando. En ese momento, puede dirigir el Error a una vista específica que no sea la vista predeterminada "Error".
Para obtener más información, consulte la publicación del blog de Scott Guthrie al respecto.
fuente
global.asax
como esta para mostrar un mensaje a los usuarios?También debe tenerse en cuenta que los errores que no establecen el código de error http en 500
(por ejemplo, UnauthorizedAccessException)
no será manejado por el filtro HandleError.
fuente
Solución para el código de error http a 500 este es un atributo llamado [ERROR] ponerlo en una acción
//EJEMPLO:
fuente
Los atributos en MVC son muy útiles en el manejo de errores en el método get y post , también rastrea la llamada ajax .
Cree un controlador base en su aplicación y heredelo en su controlador principal (EmployeeController).
EmployeeController de clase pública: BaseController
Agregue el siguiente código en el controlador base.
==============================================
Encuentra el directorio: Root / App_Start / FilterConfig.cs
Agregue el siguiente código:
Seguimiento de error AJAX:
Llame a la función CheckAJAXError en la carga de la página de diseño.
fuente
OnException
para manejar excepciones" , pero muestra una implementación bastante mala.Falta Error.aspx :) En la vista previa 5, se encuentra en su carpeta Vistas / Compartidos. Simplemente cópielo de un nuevo proyecto Preview 5.
fuente
}
fuente