Elmah.Control.WebApi未记录Web API 2的路由异常



我正在使用Web API 2.1,并尝试使用ELMAH记录所有未处理的异常。我正在尝试记录以下情况的错误:

  1. 从控制器构造函数引发异常
  2. 从消息处理程序引发异常
  3. 路由过程中引发异常
  4. 响应内容序列化期间引发异常

我按照下面提到的链接记录了所有未处理的异常。http://jasonwatmore.com/post/2014/05/03/Getting-ELMAH-to-catch-ALL-unhandled-exceptions-in-Web-API-21.aspx

http://blog.elmah.io/logging-to-elmah-io-from-web-api/

我有一个控制器:

TestController.cs

public class TestController : ApiController
    {
        private IMessageProvider _messageProvider;
        private INewMessageProvider _newMessageProvider;
        public TestController(IMessageProvider messageProvider, INewMessageProvider newMessageProvider)
        {
            _messageProvider = messageProvider;
            _newMessageProvider = newMessageProvider;
        }

        public object Get()
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest,"Error in processing the webapi");
        }
        [HttpGet]
        **[Route("api/test/{namee}")]**
        public HttpResponseMessage GetNewMessageByName(string name)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest,"Name parameter cannot be empty");
            }
            //int i = 1, j = 0;
            //int k = i / j;
            return Request.CreateResponse(HttpStatusCode.OK, _newMessageProvider.GetNewMessage() + name);
        }

Global.asax.cs

using Elmah.Contrib.WebApi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.ExceptionHandling;
namespace DemoStructureMapWebAPI
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());

        }
    }
}

现在我正在尝试测试路线:http://localhost:62145/api/test/testnewname我看到以下错误:

<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:62145/api/test/testnewname'.
</Message>
<MessageDetail>
No action was found on the controller 'Test' that matches the request.
</MessageDetail>
</Error>

路由参数namee(即api/test/{namee})和方法的输入参数GetNewMessageByName(字符串名称)不匹配因此,我得到了错误,但我看到ELMAH没有记录该错误。我无法在ELMAH日志中看到错误。根据上面提到的文章,Elmah.Control.WebApi-nuget包似乎已经解决了这些问题。

我不确定我是否遗漏了什么。

有人能帮我解决这个问题吗?

在Web API中,404个错误的处理方式有点不同,它们绕过了通常的请求管道,在ELMAH知道它们之前直接发送到浏览器。

因此,为了用ELMAH记录404个错误,您需要在WebApiConfig中添加一个"catch-all"路由作为最后一个路由,以手动记录错误。

我刚刚更新了我的博客文章,并包含了一个工作示例解决方案,该解决方案将捕获所有错误,包括404-http://jasonwatmore.com/post/2014/05/03/Getting-ELMAH-to-catch-ALL-unhandled-exceptions-in-Web-API-21.aspx

相关内容

  • 没有找到相关文章

最新更新