Mam witrynę internetową MVC, która używa uwierzytelniania OAuth / token do uwierzytelniania żądań. Wszystkie odpowiednie kontrolery mają odpowiednie atrybuty, a uwierzytelnianie działa prawidłowo.
Problem polega na tym, że nie wszystkie żądania można autoryzować w zakresie atrybutu - niektóre sprawdzenia autoryzacji muszą być przeprowadzane w kodzie wywoływanym przez metody kontrolera - jaki jest prawidłowy sposób zwrócenia nieautoryzowanej odpowiedzi 401 w tym przypadku?
Próbowałem throw new HttpException(401, "Unauthorized access");
, ale kiedy to zrobię, kod statusu odpowiedzi to 500 i otrzymuję również ślad stosu. Nawet w naszym logowaniu DelegatingHandler widzimy, że odpowiedź to 500, a nie 401.
HttpResponseException
versus, kiedy zwrócićUnauthorized()
. Używanie wyjątku dla „oczekiwanego” błędu jest trochę anty-wzorzec, więc jeśli są przypadki, w których spodziewasz się, że wywołanie popełni ten błąd, powrótUnauthorized()
jest prawdopodobnie właściwym wywołaniem. OszczędzajHttpResponseException
na naprawdę nieoczekiwane.