Web API — пользовательские ошибки — на ранней стадии конвейера

#c# #asp.net-web-api #error-handling

#c# #asp.net-веб-api #обработка ошибок

Вопрос:

Хотите вернуть пользовательскую страницу ошибок, а не желтый экран, для ошибок в проекте WebAPI, которые происходят на ранней стадии разработки.

Я заменил стандартный обработчик IExceptionHandler.

который обрабатывает больше ошибок, чем фильтры исключений, которые не обрабатывают

  • Ошибка внутри фильтра исключений
  • Исключение, связанное с маршрутизацией
  • Ошибка внутри класса обработчиков сообщений
  • Ошибка в конструкторе контроллера

Однако не все исключения обрабатываются путем замены обработчика IExceptionHandler

Например, если я выдаю ошибку в Application_BeginRequest (просто пример ошибки, возникающей на ранней стадии конвейера), это не улавливается, и я получаю желтый экран. При включенных пользовательских ошибках это урезанный желтый экран, но все же желтый экран.

Как я могу обработать все ошибки (даже на ранней стадии конвейера) и вернуть пользовательскую ошибку JSON с правильным кодом ответа, как это делается, когда срабатывает пользовательский обработчик исключений.

Некоторые статьи http://www.c-sharpcorner.com/article/exception-handling-in-asp-net-web-api/
https://www.exceptionnotfound.net/the-asp-net-web-api-exception-handling-pipeline-a-guided-tour/
https://www.jayway.com/2016/01/08/improving-error-handling-asp-net-web-api-2-1-owin/ (Я не использую OWIN, но включен для справки)

Я могу перехватить ошибку в событии Global.asax Application_Error

Комментарии:

1. Я думаю, вы стараетесь изо всех сил, если на ранней стадии возникает ошибка, то, несомненно, вы написали что-то не так, и код не будет работать. Рад, что ошибаюсь в этом, хотя

Ответ №1:

Что вы могли бы сделать, так это вернуть ответ json в методе application_error в global.asax с пустым объектом или иметь параметр 0 и т.д.