Я использую Web API 2.1 и пытаюсь зарегистрировать все необработанные исключения, используя ELMAH. Я пытаюсь регистрировать ошибки для следующих случаев:Elmah.Contrib.WebApi не регистрирует исключения маршрутизации для Web API 2
- Исключения, выброшенные из конструкторов контроллера.
- Исключения, брошенные из обработчиков сообщений.
- Исключения, брошенные во время маршрутизации.
- Исключения, возникающие при сериализации содержимого ответа.
Я следил за приведенными ниже ссылками, чтобы регистрировать все необработанные исключения. 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 (т.е. апи/тест/{namee}) и входной параметр в метод GetNewMessageByName (строка name) Следовательно, я получаю сообщение об ошибке, но я вижу, что ошибка не регистрируется ELMAH. Я не могу видеть ошибку в журналах ELMAH. В соответствии с приведенными выше статьями кажется, что пакет Elmah.Contrib.WebApi nuget исправил проблемы.
Я не уверен, что мне не хватает чего-то другого.
Может ли кто-нибудь помочь мне исправить эту проблему?
Большое спасибо за ваш ответ. Это очень полезно :) –