Zacznę od, tak, stworzyliśmy i używamy filtru wyjątków dziedziczącego z ExceptionFilterAttribute. Jest rejestrowany w konfiguracji przy uruchomieniu aplikacji tuż po naszym filtrze tożsamości i działa prawie tak, jak się spodziewano, jeśli wystąpi błąd w naszym interfejsie API.Wyjątek Obsługa interfejsu ASP.NET MVC Web API
W związku z tym szukam sposobu radzenia sobie z błędami, które mają miejsce, zanim dotrą do interfejsu API.
Powód: Nigdy nie chcemy zwrócić błędu HTML YSOD i/lub IIS. ZAWSZE chcemy uderzyć w niestandardowy filtr wyjątków/moduł obsługi, abyśmy mogli poprawnie obsłużyć logowanie i zwrócić odpowiedź JSON dla użytkownika.
W tej chwili, używając Fiddlera, aby złożyć wniosek, mogę dołączyć do procesu w3wp.exe i zobaczyć, że żądanie trafiło w metodę Application_BeginRequest w pliku global.asax. Następnie zwraca po prostu odpowiedź 500. Nigdy nie pęka w kodzie z wyjątkiem lub nie trafia do żadnego z moich punktów przerwania po tym. Wygląda na to, że zwraca błąd IIS. Nigdy nie chcemy, aby tak się stało. Potrzebujemy możliwości wychwycenia wszystkich tych wyjątków "niskiego poziomu", zarejestrowania ich i zwrócenia użytkownikowi czegoś znaczącego.
Czy jest coś, co możemy zrobić, aby poradzić sobie z błędami, co wydaje się uderzać w kod ASP.NET MVC Web API?
To jakoś nie pasuje. Czy gdzieś wyrzucasz wyjątki do biblioteki? Dlaczego po prostu nie złapać wyjątku w kontrolerze i nie zwrócisz widoku błędu według własnego wyboru? –
To jest za pomocą interfejsu API ASP.NET MVC Web, więc nie zwracamy widoków z kontrolerów. Zwracamy odpowiedzi JSON/XML. Wspominam również w moim pytaniu, że potrzebuję sposobu na radzenie sobie z wyjątkami, ZANIM dotrą do kontrolerów. Obecnie mamy wyjątek ExceptionFilter, który łapie wyjątki w dowolnym miejscu, gdy tylko znajdziemy się w kontrolerze, abyśmy nie musieli próbować/łapać przy każdej akcji. – phreak3eb
Nie sądzę, że w pełni rozumiem twoje pytanie. Jakie typy błędów próbujesz dokładnie złapać? – cecilphillip