Подтвердить что ты не робот

Как настроить Elmah с помощью ASP.NET Web API

Я пробовал много elmah nugets, но они не работали с ASP.NET Web API. Кто-нибудь знает, почему? Есть ли какая-нибудь работа для этого?

4b9b3361

Ответ 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. См. Образец ссылки ниже

Пример Elmah WebAPI

Ответ 3

Проверьте приведенный ниже URL, который он описывает в деталях, как использовать elmah с Web API:

http://blogs.msdn.com/b/webdev/archive/2012/11/16/capturing-unhandled-exceptions-in-asp-net-web-api-s-with-elmah.aspx

Вы также можете использовать пакет NuGet ниже:

Install-Package Elmah.Contrib.WebApi

Использование:

Просто зарегистрируйте его во время запуска вашего приложения или на основе контроллера за контроллером.

protected void Application_Start()
{
    GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

    ...
}

(из репозиторий Elmah.Contrib.WebApi GitHub)

Ответ 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, enter image description here Менеджер пакетов Nuget загрузит и добавит необходимые DLL и изменит web.config <appSetting> для Elmah на wo enter image description here rk.

Шаг 3: Что это! Теперь ваш Elmah готов к тестированию. Я сгенерировал 404, чтобы проверить, работает ли Elmah, к ELMAH можно получить доступ по этому URL: http://yourapp.com/elmah. enter image description hereenter image description here

Надеюсь, что это поможет:)

Дальнейшее чтение: