gpt4 book ai didi

asp.net-web-api - 如何使用 ASP.NET Web API 设置 Elmah

转载 作者:行者123 更新时间:2023-12-03 07:49:29 24 4
gpt4 key购买 nike

我已经尝试了很多 elmah nugets,但它们不适用于 ASP.NET Web API。有人知道为什么吗?有什么解决办法吗?

最佳答案

使用ELMAH 捕获WEB API 中的异常有两种选择。

如果您想捕获 操作和 Controller 中遇到的错误 ,即在您的业务逻辑中,您可以创建一个 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());
}
}

使用上述方法将不会处理以下错误:
  • 从 Controller 构造函数抛出的异常。
  • 从消息处理程序抛出的异常。
  • 路由期间抛出的异常。
  • 响应内容序列化期间抛出的异常

  • 引用: 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 服务器错误的自定义错误消息,你可以在 Web Api 中实现新的 ExceptionHandler (注意 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 support@contoso.com 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

    关于asp.net-web-api - 如何使用 ASP.NET Web API 设置 Elmah,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10116593/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com