Возврат исключений в виде сообщений JSON
========================================

Я занимаюсь разработкой API с ASP.NET Core и борюсь с обработкой исключений.

Когда возникает какое-либо исключение или в любом контроллере, где я хочу вернуть пользовательские ошибки с разными кодами состояния, я хочу вернуть отчеты об исключениях в формате JSON. Мне не нужен HTML в ответах об ошибках.

Я не уверен, стоит ли мне использовать промежуточное программное обеспечение для этого или что-то еще. Как я должен возвращать исключения JSON в ASP.NET Core API?

Хорошо, у меня есть рабочее решение, которым я очень доволен.

добавлять**промежуточный слой**: В`Configure` Метод, зарегистрируйте промежуточное программное обеспечение (поставляется с ASP.NET Core).

Создайте класс для сообщений. Напишите простой класс, который представляет экземпляры**Сообщения об ошибках JSON** Вы хотите отправить запрос в случае ошибки:

Создать контроллер ошибок добавить**Контроллер ошибок** это обрабатывает все ожидаемые и неожиданные ошибки. Обратите внимание, что эти маршруты соответствуют конфигурации промежуточного программного обеспечения.

Теперь, когда я хочу выдать ошибку в любом месте, я могу просто сделать это. Запрос перенаправляется в обработчик ошибок и отправляет`500` с хорошим отформатированным сообщением об ошибке. Также,`404` и другие коды обрабатываются изящно. Любые пользовательские коды состояния, которые я хочу отправить, я также могу вернуть их с экземпляром моего`ExceptionMessageContent`, например:



Фильтр исключений (как атрибут или глобальный фильтр) - это то, что вы ищете. От[документы](https://docs.asp.net/en/latest/mvc/controllers/filters.html#exception-filters):

Фильтры исключений обрабатывают необработанные исключения, в том числе те, которые возникают во время создания контроллера и привязки модели. Они вызываются только тогда, когда в конвейере возникает исключение. Они могут предоставить единое местоположение для реализации общих политик обработки ошибок в приложении.

Если ты хочешь**любой** необработанное исключение, которое будет возвращено как JSON, это самый простой метод:

Вы можете настроить ответ, чтобы добавить столько деталей, сколько вы хотите. ObjectResult будет сериализован в JSON.

Добавьте фильтр как глобальный фильтр для MVC при запуске: