Sé que ASP.NET MVC tiene un atributo de filtro de error para manejar el tipo de error especificado. Sin embargo, esta función no puede detectar ningún error que ocurra al iniciar la aplicación. Por lo tanto, necesito agregar algún código al método "Application_Error" para manejar este error como el siguiente código.¿Cómo se maneja el error de la aplicación ASP.NET que ocurre al inicio de la aplicación y error de transferencia y visualización en la vista MVC?
public void Application_Error(object sender, EventArgs e)
{
// At this point we have information about the error
var ctx = HttpContext.Current;
var exception = ctx.Server.GetLastError();
var errorInfo =
"<br>Offending URL: " + ctx.Request.Url +
"<br>Source: " + exception.Source +
"<br>Message: " + exception.Message +
"<br>Stack trace: " + exception.StackTrace;
ctx.Response.Write(errorInfo);
Server.ClearError();
}
Aunque, este código funciona bien, cuando se produce error de aplicación normal como error que se produce en la página de vista. Sin embargo, no funciona cuando se produce un error en el inicio de la aplicación porque los objetos de solicitud y respuesta siempre son nulos.
A continuación, intento resolver esta cuestión configurando la redirección predeterminada en errores personalizados como el siguiente.
<customErrors mode="On" defaultRedirect="Scripts/ApplicationError.htm"></customErrors>
Por desgracia, no funciona porque cuando la aplicación recibe la solicitud redirigida, se intenta iniciar la aplicación de nuevo y tirar excepción de nuevo.
¿Cómo resolver este problema? Alternativamente, ¿tiene otra idea para manejar este error?
Gracias,
PS. La razón principal para crear este controlador es que quiero mostrar el error cuando la aplicación no se puede conectar a otro servicio, como la base de datos, para almacenar datos en el inicio de la aplicación.
Utilizo para crear algún código similar a su respuesta. Borro cualquier error cuando se dispara el error de la aplicación y guardo el último error en la variable pública estática. Después de eso, tengo un filtro de acción que verifica esta variable y muestra un error si está disponible. Sin embargo, no me gusta esta idea. Porque es posible mostrar la página de error a otra solicitud que causa este error. –
No debería haber ninguna otra solicitud. Si su aplicación falla en la inicialización, no veo cómo manejaría ninguna solicitud si está en un estado fallido. La única solución sería solucionar el problema y reiniciar la aplicación. –
Acepto que las solicitudes posteriores no deberían producirse si se produce un error de inicio, por lo que necesita una prueba/captura de todo el Application_Start. Si comprueba su excepción de inicio en BeginRequest, ¿hay una forma más amigable de MVC de redirigir que Response.Redirect? La mía redirige de una manera que Firefox dice que no terminará. ¿Hay alguna manera de redirigir a una acción que toma la excepción, como Error.Startup (ex). – flipdoubt