Ich habe eine MVC-Webapi-Site, die die OAuth / Token-Authentifizierung zur Authentifizierung von Anforderungen verwendet. Alle relevanten Controller haben die richtigen Attribute und die Authentifizierung funktioniert einwandfrei.
Das Problem ist, dass nicht die gesamte Anforderung im Rahmen eines Attributs autorisiert werden kann - einige Autorisierungsprüfungen müssen in Code durchgeführt werden, der von Controller-Methoden aufgerufen wird - wie kann in diesem Fall eine nicht autorisierte 401-Antwort korrekt zurückgegeben werden?
Ich habe es versucht throw new HttpException(401, "Unauthorized access");
, aber wenn ich das mache, ist der Antwortstatuscode 500 und ich bekomme auch einen Stack-Trace. Selbst in unserem Protokollierungs-DelegatingHandler können wir sehen, dass die Antwort 500 und nicht 401 ist.
HttpResponseException
Versus zu werfen, wann er einen zurückgeben sollUnauthorized()
. Die Verwendung der Ausnahme für einen 'erwarteten' Fehler ist ein Anti-Muster. Wenn Sie also in einigen Fällen erwarten, dass der Anruf diesen Fehler macht,Unauthorized()
ist die Rückgabe wahrscheinlich der richtige Anruf. Speichern SieHttpResponseException
für das wirklich Unerwartete.