В нашем приложении у нас есть довольно простой набор обработчиков ведения журнала (IExceptionFilters на контроллерах MVC и API и дополнительная ловушка в Application_Error()), но есть целая категория ошибок, которые не вызывают ни одну из них. Если исключение генерируется из самого WebAPI или из чего-то, используемого внутри (например, инициализатора типа класса, созданного преобразователем зависимостей), все, что я получаю, — это ответ 500, отправляемый клиенту.
Единственный способ, который я нашел для сбора сведений об ошибке, — это использовать HttpConfiguration.IncludeErrorDetailPolicy, чтобы настроить приложение для выдачи сведений об ошибке, однако это известная плохая практика — передавать сведения об ошибке миру, поэтому я бы предпочел включить это полностью отключить или установить для него что-то условное (скажем, только локальное). Но это означает удаленное взаимодействие с сервером, на котором запущено приложение, и локальный вызов API с помощью инструмента, который может проверять ответы (например, IE или Google). Chrome), чтобы выяснить, что происходит.
Я видел здесь еще один вопрос в подобном ключе (здесь), но представленное решение (с использованием DelegatingHandler для проверки ответов) не соответствует нашим потребностям, как нам кажется. Действительно ли нет события, которое я мог бы перехватить, точки расширения, которую я мог бы использовать, или чего-то подобного, чтобы зафиксировать фактическое произошедшее исключение?
(Кроме того, я полагаю, что мог бы изменить свой IncludeErrorDetailPolicy на Always и использовать решение, представленное в другом потоке, для захвата сведений об ошибке в MessageHandler, регистрации их и ручного удаления их из ответа, отправляемого клиенту, но это был бы неприятный взлом.)
Мысли? :/