Я пробовал много elmah nugets, но они не работали с ASP.NET Web API. Кто-нибудь знает, почему? Есть ли какая-нибудь работа для этого?
Как настроить Elmah с помощью ASP.NET Web API
Ответ 1
Существует два варианта использования ELMAH для исключения исключений в WEB API.
Если вы хотите зафиксировать ошибки, встречающиеся в действиях и контроллерах, т.е. в вашей бизнес-логике вы можете создать ActionFilterAttribute и зарегистрировать эти исключения в ELMAH.
Пример:
public class UnhandledExceptionFilter : ExceptionFilterAttribute {
public override void OnException(HttpActionExecutedContext context) {
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
}
}
Затем подключитесь, добавив этот фильтр.
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());
}
}
С приведенным выше подходом следующие ошибки не будут обрабатываться:
- Исключения, выведенные из конструкторов контроллера.
- Исключения, выведенные из обработчиков сообщений.
- Исключения, возникающие при маршрутизации.
- Исключения, возникающие при сериализации содержимого ответа
Ссылка: 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
Чтобы ELMAH регистрировал ошибки WEB API на глобальном уровне, чтобы все 500 ошибок сервера были пойманы, сделайте следующее:
Установить nuget: https://www.nuget.org/packages/Elmah.Contrib.WebApi/
Добавьте ниже в WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
...
}
}
И если вы хотите показать пользовательские сообщения об ошибках для ошибок 500 Server, вы можете реализовать новый ExceptionHandler в Web Api (обратите внимание, что ExceptionLogger и ExceptionHandler отличаются.)
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);
}
}
}
Ссылка: http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
Ответ 2
одним из вариантов было бы настроить пользовательский атрибут ExceptionFilterAttribute, переопределить метод OnException и подать сигнал от Elmah. См. Образец ссылки ниже
Ответ 3
Проверьте приведенный ниже URL, который он описывает в деталях, как использовать elmah с Web API:
Вы также можете использовать пакет NuGet ниже:
Install-Package Elmah.Contrib.WebApi
Использование:
Просто зарегистрируйте его во время запуска вашего приложения или на основе контроллера за контроллером.
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
Ответ 4
Для веб-API ASP.NET используйте Elmah.MVC пакет nuget, подробности которого приведены ниже
Взято из: КАК УСТАНОВИТЬ ELMAH.MVC С ASP.NET MVC 4?
Что такое Эльма?
ELMAH - проект с открытым исходным кодом, целью которого является регистрация и отправка необработанных исключений в веб-приложения ASP.NET.
Зачем использовать Elmah?
ELMAH служит ненавязчивым перехватчиком необработанных исключений ASP.NET, которые обычно проявляются с желтым экраном смерти ASP.NET
Шаг 2: В менеджере пакетов Nuget найдите "Elmah" и установите Elmah.MVC расширение nuget,
Менеджер пакетов Nuget загрузит и добавит необходимые DLL и изменит web.config <appSetting>
для Elmah на wo rk.
Шаг 3: Что это! Теперь ваш Elmah готов к тестированию. Я сгенерировал 404, чтобы проверить, работает ли Elmah, к ELMAH можно получить доступ по этому URL: http://yourapp.com/elmah.
Надеюсь, что это поможет:)
Дальнейшее чтение: