ExceptionFilter против ExceptionLogger против ExceptionHandler в веб-API 2 - PullRequest
0 голосов
/ 22 января 2019

Я читал эту статью , и, кажется, есть три разных события исключений.

Я хотел бы использовать каркас ведения журналов, такой как Serilog, для захвата исключений.

Должен ли я поместить код регистрации в ExceptionFilter, затем ExceptionLogger, затем ExceptionHandler?Я предполагаю, что у них всех есть доступ к полному стеку исключений.

Кроме того, я должен также поместить код регистрации в Application_Error в global.asax?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

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

Если выдается незапланированное исключение, оно будет получено в следующем порядке:

  1. ExceptionLogger
  2. ExceptionFilter
  3. ExceptionHandler (если не обработано)

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


ExceptionLogger

Решение для просмотра всех неисследованных исключений, пойманных Web API. Существует вероятность возникновения исключения до того, как вы даже нажмете на действие контроллера или после того, как контроллер уже вернул ответ о результате действия (помните, что возвращаемое значение из действия не передается напрямую в браузер, но обрабатывается в дальнейшем запросом / ответом) трубопровод).

Например, исключение может возникнуть в конструкторе контроллера, во время маршрутизации, сериализации ответов и т. Д.

Могут быть зарегистрированы несколько регистраторов исключений, и все они будут вызваны в случае исключения.

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

  • Цель: просмотреть все необработанные исключения (до того, как они даже достигли фильтров исключений)

  • Область применения: global


ExceptionFilter

Используйте это для обработки ожидаемых исключений (например, UnauthorizedException, генерируемых вашей бизнес-логикой) и настраивайте ответ в зависимости от типа исключения. Другими словами, используйте его для воздействия на исключение (например, если исключение - UnathorizedException, то перенаправьте пользователя на страницу входа).

Первый фильтр для обработки "выигрышей" исключения, так что другие обработчики исключений даже не будут вызваны, если исключение уже было обработано (объект ответа установлен)

  • Назначение: обрабатывать (не регистрировать) исключения
  • Область действия: за действие, на контроллер, глобально

ExceptionHandler

Это можно и нужно использовать для регистрации незапланированных исключений. Только один может быть зарегистрирован на одну заявку. Его также можно использовать для отображения пользователю общей страницы ошибки - «Произошла неизвестная ошибка».

  • Цель: регистрировать и обрабатывать непредсказуемые / неожиданные исключения
  • Область применения: global

Я рекомендую взглянуть на эту статью

0 голосов
/ 25 января 2019

Если вы хотите регистрировать исключения, вы должны поместить код в ExceptionHandler или Application_Error (это то же самое). ExceptionFilter классифицирует ошибки. Application_Error обрабатывает ошибку, если приложение выдает исключение (я).

ExceptionFilter разделяет и классифицирует ошибки с помощью вашей логики ошибок, ExceptionLogger регистрирует, когда ошибки произошли как и те же с помощью вашей логики регистрации ошибок.

Короче говоря, вы можете ввести свой код в Application_Error в global.asax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...