log handling exceptions error catch all c# asp.net .net asp.net-web-api error-reporting

c# - handling - Application_Error en global.asax no detecta errores en WebAPI



web api error handling (1)

Resuma su error manejando la lógica de Application_Error en su propia función. Cree un filtro de excepción de la API web .

//register your filter with Web API pipeline GlobalConfiguration.Configuration.Filters.Add(new LogExceptionFilterAttribute()); //Create filter public class LogExceptionFilterAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { ErrorLogService.LogError(context.Exception); } } //in global.asax or global.asax.cs protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); ErrorLogService.LogError(ex); } //common service to be used for logging errors public static class ErrorLogService { public static void LogError(Exception ex) { //Email developers, call fire department, log to database etc. } }

Los errores de la API web no desencadenan el evento Application_Error. Pero podemos crear un filtro de excepción y registrarlo para manejar los errores. Consulte también Global Error Handling en ASP.NET Web API 2 .

Para un proyecto en el que estoy trabajando, una de las cosas que estamos implementando es algo que tenemos codificado en algunos de mis equipos más antiguos proyectos ASP.NET y MVC: un receptor de excepción Application_Error que envía un correo electrónico al equipo de desarrollo con el experiencia de excepción y detalles más relevantes.

Así es como se ve:

Global.asax:

protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); string path = "N/A"; if (sender is HttpApplication) path = ((HttpApplication) sender).Request.Url.PathAndQuery; string args = string.Format("<b>Path:</b> {0}", path); // Custom code that generates an HTML-formatted exception dump string message = Email.GenerateExceptionMessage(ex, args); // Custom code that sends an email to the dev team. Email.SendUnexpectedErrorMessage("Some App", message); }

Sin embargo, un problema "menor": cuando intencionalmente tengo una parte del código, lanzo una excepción para probar este mecanismo ...

public static void GetMuffinsByTopping(string topping) { throw new Exception("Test Exception!", new Exception("Test Inner Exception!!!")); // Actual repository code is unreachable while this test code is there }

El JavaScript front-end intercepta inmediatamente una solicitud HTTP 500, pero no se está llegando al código global.asax.cs indicado anteriormente (establezco un punto de interrupción en la primera línea de ejecución del método).

Pregunta: ¿De qué manera puedo obtener el "viejo" controlador de Application_Error para enviar mensajes de error, de modo que los desarrolladores de nuestro equipo puedan depurar más fácilmente nuestra aplicación?