Я пишу HttpHandler, и, как часть моего внутреннего дизайна, я бросаю разные исключения и улавливаю их на верхнем уровне, чтобы определить, какой код состояния задает запрос.Захват базы, но не вспомогательные исключения
I.e. ArgumentException запускает Bad Request
AuthenticationException запускает Несанкционированное
OracleException запускает InternalServerError
и т.д.
Проблема я обнаружил, что я использовал InvalidOperationException, чтобы вызвать NotFound, но ошибка в моем коде заставило меня осознать, что, конечно, некоторые системные исключения наследуют от этих исключений базовой системы, что вызывает неожиданные ответы.
I.e. Я обнаружил, что ObjectDisposedException наследует от InvalidOperationException, что означает, что ответ возвращает 404 вместо 500.
Есть ли способ поймать только базовое исключение?
Я нашел this thread, который предполагает, что я могу сделать фильтр и ретрол, но это кажется взломанным.
Буду ли я лучше создавать собственные типы исключений, чтобы сохранить все эти проблемы?
Да, вы обязательно должны свернуть свое собственное исключение для этого конкретного варианта использования, а не использовать 'InvalidOperationException'. – dursk
Определенно не поднимайте 'InvalidOperationException' за что-то, что это не значит. То же самое относится к любому другому исключению. Соблюдайте собственные исключения и основывайте их на «Исключении». Просто убедитесь, что вы передаете исходное исключение как внутреннее исключение, когда вы бросаете свои собственные исключения, чтобы поддерживать стек вызовов. Я не знаю, почему у вас есть нисходящая линия, это законная и очень распространенная ошибка. – bokibeg
@mattm @bokibeg спасибо, я, вероятно, должен был прочитать doco о том, что .NET определяет '' InvalidOperationException''. Я буду определять свои собственные исключения и обернуть любые обнаруженные исключения. –