Выполнение моего регистратора ошибок [IExceptionLogger][1]
вызывается дважды, когда исключение выбрасывается из действия контроллера.ASP.NET Web API IExceptionLogger, вызываемый дважды
context.RequestContext.Configuration.Services.GetServices(typeof(IExceptionLogger))
это возвращает одну запись, поэтому я уверен, что зарегистрирован только один экземпляр регистратора. Я не хочу, чтобы мои необработанные исключения записывались дважды, и я не думаю, что это ожидаемое поведение по умолчанию. Как устранить причину этого?
Если я установил точку останова в методе LogAsync()
, столбец вызова показывает [External Code]
по обоим вызовам.
[RoutePrefix("test")]
public class MyController : ApiController
{
[HttpGet, AllowAnonymous]
[Route("test")]
public string GetTest()
{
throw new InvalidOperationException("Shit happens");
}
}
Регистратор вводится так:
config.Services.Add(typeof(IExceptionLogger), new WebApiExceptionLogger());
public class WebApiExceptionLogger : IExceptionLogger
{
private readonly ILoggingService loggingService;
public WebApiExceptionLogger()
{
this.loggingService = ServiceContainer.Factory.Resolve<ILoggingService>();
}
public Task LogAsync(ExceptionLoggerContext context, CancellationToken cancellationToken)
{
this.loggingService.Log(LogLevel.Error, this.GetType().Name, context.Exception, "Ship has just happened");
return Task.FromResult(true);
}
}
Показать регистрационный код? Можно ли просто выбросить два исключения? – MartinM