tutorial - Cómo configurar Elmah con ASP.NET Web API
web api maphttproute (4)
Compruebe la siguiente URL que describe en detalles sobre cómo usar elmah con la API web:
También puede usar el paquete NuGet a continuación:
Install-Package Elmah.Contrib.WebApi
Uso:
Simplemente inscríbalo durante el inicio de la aplicación o controlador por controlador.
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
He intentado muchos elmah nugets pero no funcionaron con ASP.NET Web API. ¿Alguien sabe por qué? Hay alguna solución para eso?
Hay dos opciones al usar ELMAH para capturar excepciones en la API WEB.
Si desea capturar los errores que se encuentran en Acciones y Controladores , es decir, en su lógica comercial puede crear un Atributo de Filtro de Acción y registrar esas excepciones en ELMAH.
ejemplo:
public class UnhandledExceptionFilter : ExceptionFilterAttribute {
public override void OnException(HttpActionExecutedContext context) {
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
}
}
Luego conecte agregando ese filtro.
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Filters.Add(new UnhandledExceptionFilter());
}
}
Con el enfoque anterior, no se manejarán los siguientes errores:
- Excepciones lanzadas desde los constructores del controlador.
- Excepciones lanzadas desde los manejadores de mensajes.
- Excepciones lanzadas durante el enrutamiento.
- Excepciones lanzadas durante la serialización de contenido de respuesta
Referencia: http://blogs.msdn.com/b/webdev/archive/2012/11/16/capturing-unhandled-exceptions-in-asp-net-web-api-s-with-elmah.aspx & http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
Para que ELMAH pueda registrar errores de la API WEB a nivel global, de manera que se capturen los 500 errores del servidor, haga lo siguiente:
Instalar nuget: https://www.nuget.org/packages/Elmah.Contrib.WebApi/
Agregue lo siguiente a WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
...
}
}
Y si desea mostrar mensajes de error personalizados para los errores de 500 Server, puede implementar el nuevo ExceptionHandler en Web Api (tenga en cuenta que ExceptionLogger y ExceptionHandler son diferentes).
class OopsExceptionHandler : ExceptionHandler
{
public override void HandleCore(ExceptionHandlerContext context)
{
context.Result = new TextPlainErrorResult
{
Request = context.ExceptionContext.Request,
Content = "Oops! Sorry! Something went wrong." +
"Please contact [email protected] so we can try to fix it."
};
}
private class TextPlainErrorResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string Content { get; set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response =
new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent(Content);
response.RequestMessage = Request;
return Task.FromResult(response);
}
}
}
Referencia: http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
Para ASP.NET Web API utiliza el paquete Nuget Elmah.MVC cuyos detalles se detallan a continuación.
Tomado de: ¿CÓMO CONFIGURAR ELMAH.MVC CON ASP.NET MVC 4?
¿Qué es Elmah?
ELMAH es un proyecto de código abierto cuyo objetivo es registrar e informar excepciones no controladas en aplicaciones web ASP.NET.
¿Por qué usar Elmah?
ELMAH sirve como un interceptor discreto de excepciones ASP.NET no controladas, las que normalmente se manifiestan con la pantalla amarilla de muerte de ASP.NET.
Así que ahora sabemos qué y por qué usar Elmah, vamos a comenzar rápidamente a utilizar Elmah con su proyecto ASP.NET MVC.
Paso 1: haga clic con el botón derecho en su solución y seleccione la opción "Gestionar paquetes Nuget"
Paso 2: En el Administrador de paquetes de Nuget busque "Elmah" e instale la extensión Elmah.MVC nuget. El administrador del paquete Nuget descargará y agregará los dlls necesarios y modificará <appSetting>
de web.config para Elmah to wo rk.
Paso 3: ¡ Eso es todo! Tu Elmah ahora está lista para probar. He generado un 404 para probar si mi Elmah funciona, se puede acceder a ELMAH mediante esta url: http://yourapp.com/elmah .
Espero que esto ayude :)
Otras lecturas :
Una opción sería configurar un ExceptionFilterAttribute personalizado, anular el método OnException y señalar a Elmah desde allí. Ver el enlace de muestra a continuación