He intentado muchos elmah nugets pero no funcionaban con ASP.NET Web API. ¿Alguien sabe por qué? Hay alguna solución para eso?Cómo configurar Elmah con ASP.NET Web API
Respuesta
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 abajo muestra
Para API Web ASP.NET utilice el paquete Nuget Elmah.MVC, se dan detalles de los que a continuación
Tomado de: HOW TO SETUP ELMAH.MVC WITH ASP.NET MVC 4 ?
¿Cuál 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 discreto interceptor de excepciones de ASP.NET no controladas, las que normalmente se manifiestan con ASP.NET yellow screen of death.
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 derecho sobre su solución y seleccione la opción "Administrar paquetes Nuget"
Paso 2: En la búsqueda gerente Nuget paquete de "Elmah" e instalar la extensión Nuget Elmah.MVC. El administrador de paquetes Nuget descargará y agregará los archivos DLL requeridos y modificará el archivo web <appSetting>
para Elmah a 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 por esta url: http://yourapp.com/elmah.
Espero que esto ayude :)
Lectura adicional:
¿Y está generando ese 404 de un 'ApiController'? Si no es así, y es un controlador MVC estándar, te has perdido el objetivo de la pregunta por completo. –
He generado 404 de un controlador normal, esto es solo un ejemplo, igual hubiera sido el caso si hubiera usado el controlador webapi y causara un 404. – Yasser
¿Lo has probado realmente? Porque estoy bastante seguro de que ese no es el caso. El manejo de excepciones funciona de manera diferente en la API web. –
compruebe la URL a continuación se describen en detalle cómo utilizar ELMAH con API Web:
También puede utilizar debajo del paquete NuGet:
Install-Package Elmah.Contrib.WebApi
Uso:
Simplemente regístrela durante el inicio de la aplicación, o controlador por controlador.
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
Hay dos opciones mediante el uso de ELMAH para capturar excepciones en Web API.
Si desea capturar los errores que se encuentran en Acciones y controladores, es decir, en la lógica de su empresa 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));
}
}
Entonces wireup mediante la adición de 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 siguiente errores no será manejada:
- Excepciones lanzados desde constructores de controlador.
- Excepciones lanzadas desde los controladores de mensajes.
- Excepciones lanzadas durante el enrutamiento.
- Excepciones lanzadas durante la serialización contenido de la 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 que entrar errores Web API a nivel mundial tal que todos los errores 500 de servidor son capturados y luego hacer esto :
Instalar Nuget: https://www.nuget.org/packages/Elmah.Contrib.WebApi/
Añadir el siguiente a WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
...
}
}
Y si desea mostrar los mensajes de error personalizados para los errores 500 Server se puede implementar la nueva 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
gracias amigo, esto fue útil. Aún me estaba rascando la cabeza hasta que descubrí cómo hacerlo funcionar en mi situación (donde WebApi también se ejecuta en el contexto de un sitio de MVC); la respuesta fue simplemente instalar también el paquete Elmah.MVC. Lo amplío un poco en mi blog aquí: http://dbarrowstechblog.blogspot.co.uk/2015/03/elmah-aspnet-webapi-tip.html –
La primera solución (simple) que llama directamente a 'Elmah.ErrorLog .GetDefault (HttpContext.Current) .Log' funciona bien, pero no envía un correo electrónico (si es así como configuraste Elmah) - simplemente inicia sesión. Si desea que su excepción sea manejada por Elmah de la manera que ha especificado en web.config, entonces le sugiero que reemplace la llamada de .Log con 'Elmah.ErrorSignal.FromCurrentContext(). Raise (context.Exception);' que desencadenar el manejo normal de Elmah. – Greg
- 1. ASP.NET Web API con DotNetOpenAuth
- 2. autenticación con ASP.NET Web API
- 3. Transacciones con ASP.net WEB API
- 4. Manejar excepciones en servicios web con Elmah
- 5. ¿Es posible configurar Autofac para que funcione con ASP.NET MVC y ASP.NET Web Api
- 6. Asp.Net Web Api - ModelBinders
- 7. actualización parcial con asp.net web api
- 8. Enviando mensaje con 401: Asp.net Web-api
- 9. Protección de Elmah en el sitio web de ASP.NET
- 10. ASP.NET Web API en IE
- 11. ASP.net Web API y System.Net.Http
- 12. ASP.NET Web API Web en forma
- 13. ASP.NET Web API ActionFilter ejemplo
- 14. ¿Cómo crear ASP.NET Web API Url?
- 15. ¿Cómo configurar ELMAH para que funcione con Windows Azure? Obtengo un 404 en Elmah.axd
- 16. ASP.NET Web API descargar texto
- 17. ASP.NET Web Api y UrlDecode
- 18. ¿Es posible configurar ELMAH por completo en el código?
- 19. ASP.NET Health Monitoring o ELMAH ¿qué elegir?
- 20. Método con dos parámetros en asp.net web api
- 21. Método con parámetro de diccionario en Asp.Net Web API
- 22. Ayuda con la configuración de Elmah en ASP.NET
- 23. Autenticación API web ASP.NET MVC 4 con proveedor de membresía
- 24. ASP.Net Web Api + KnockoutJs + MVC4 - Vincularlo
- 25. Cómo mezclar Entity Framework con Web API
- 26. ASP.NET Web API - Solicitud GET con múltiples argumentos
- 27. ASP.NET Web API: proveedor de servicios OAuth
- 28. Autenticación y Autenticación API Web ASP.NET
- 29. Llamar ASP.NET Web API desde código subyacente
- 30. ASP.NET Web API devuelve DTO cuestionables?
lo luché con (y todavía no he encontrado el momento de abordar) está teniendo la autenticación de formularios en mi acceso ELMAH mezclado con autenticación básica en mi api –
@AntonyScott ¿Has mirado en [SEÑORA ] (http://www.raboof.com/projects/madam/)? –