Отключить * все * обработку исключений в ASP.NET Web API 2 (чтобы освободить место для моего собственного)?
Я хочу подключить обработку исключений в компонент промежуточного программного обеспечения, что-то вроде этого:
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch (Exception ex)
{
// Log error and return 500 response
}
}
Однако, некоторые из исключений, которые я хотел бы поймать, были пойманы и преобразованы вHttpErrorResponse
с помощью конвейера Web API, прежде чем я смогу добраться до них. В процессе я теряю много деталей об ошибках, поэтому не могу получить полезные трассировки стека при отладке и т. Д. (Отладчик даже не останавливается, когда выдается исключение - мне нужно вручную пройтись по коду и посмотреть, где это не удается ...).
Я попытался добавить пользовательский обработчик исключений в следующей реализации:
public Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
{
var owinContext = context.Request.GetOwinContext();
owinContext.Set(Constants.ContextK,eys.Exception, context.Exception);
return Task.FromResult(0);
}
зарегистрирован черезconfig.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler());
в моей конфигурации запуска, но глядя на это после выполненияNext.Invoke(context)
через
context.Get<Exception>(Constants.ContextKeys.Exception);
еще не дает мне все детали, которые я хочу, а также не останавливается в точке сбоя с отладчиком.
Есть ли способ, которым я могуполностью выключивсе встроенная обработка ошибок, чтобы мое промежуточное ПО могло позаботиться об этом?
осветление, так как многие люди, кажется, неправильно понимают, что я ищу:
Встроенная обработка ошибок в веб-API ловитнемного (но не все) исключения и переписывает их в 500 ответов.Я хочу пойматьвсе исключения, сделать некоторые записи, изатем испустить 500 ответовс информацией, которую я выбираю (для большинства из них см. следующий пункт).Есть также некоторые исключения, которые сигнализируют о сбоях бизнес-логики, для которых я хочу вернуть 40-кратные ошибки.Я хочу, чтобы это было в верхней части конвейера (приложения), т.е.все еще в жизненном цикле запросаЯ хочу справиться с этим, используя OWIN, чтобы сделать его переносимым на возможный сценарий будущего размещения (то есть не написано, что это приложение всегда будет размещаться на IIS - модули HTTP, Global.asax.cs и др. Не имеют значения Вот).