Zajmuję się tworzeniem aplikacji Web API 2 i obecnie staram się formatować odpowiedzi błędów w jednolity sposób (aby konsument wiedział również, jaki obiekt danych/strukturę, którą mogą sprawdzić, aby uzyskać więcej informacji o błędach). To, co mam do tej pory:Jednolite, spójne odpowiedzi na błędy z ASP.Net Web API 2
{
"Errors":
[
{
"ErrorType":5003,
"Message":"Error summary here",
"DeveloperAction":"Some more detail for API consumers (in some cases)",
"HelpUrl":"link to the docs etc."
}
]
}
Działa to dobrze dla wyjątków rzucanych przez samego wniosku (tj wewnątrz kontrolerów). Jeśli jednak użytkownik zażąda złego URI (i otrzyma 404) lub użyje niewłaściwego czasownika (i otrzyma 405) itp., Web Api 2 wypisze domyślny komunikat o błędzie, np.
{
Message: "No HTTP resource was found that matches the request URI 'http://localhost/abc'."
}
Czy jest jakiś sposób na schwytanie tego rodzaju błędów (404, 405 itd) i formatowanie ich w odpowiedzi błędu w pierwszym przykładzie powyżej?
Do tej pory próbowałem:
- niestandardowy ExceptionAttribute inherting
ExceptionFilterAttribute
- niestandardowy ControllerActionInvoker inherting
ApiControllerActionInvoker
IExceptionHandler
(nowa globalna Error Handling z funkcji Web API 2,1)
jednak żadne z tych podejść nie jest w stanie uchwycić tego rodzaju błędów (404, 405 itd.). Wszelkie pomysły na to, jak/jeśli można to osiągnąć?
... lub, czy podążam w tym kierunku w niewłaściwy sposób? Czy powinienem sformatować tylko odpowiedzi na błędy w moim konkretnym stylu dla błędów aplikacji/użytkowników i polegać na domyślnych odpowiedziach na błędy dla rzeczy takich jak 404?
'Jeżeli tylko ja formacie odpowiedzi na błędy w moim konkretnym stylu dla błędów aplikacji/poziomu użytkownika i polegać na domyślnych odpowiedziach na błędy dla rzeczy takich jak 404? "... moja opinia brzmi tak –
Coraz bardziej przechodzę do tego podejścia. Dziękuję zarówno za wspaniałe odpowiedzi/komentarze. –