1. ホーム
  2. c#

[解決済み] ASP.NET Web API : 401/unauthorized レスポンスを返すための正しい方法

2022-06-06 22:46:02

質問

OAuth/token認証を使用してリクエストを認証するMVC webapiサイトを持っています。関連するすべてのコントローラは正しい属性を持っており、認証は問題なく動作しています。

問題は、属性の範囲内ですべてのリクエストを認証できるわけではないことです。いくつかの認証チェックは、コントローラメソッドによって呼び出されるコードで実行されなければなりません。この場合、401 unauthorisedレスポンスを返す正しい方法は何でしょうか?

試してみたところ throw new HttpException(401, "Unauthorized access"); を試してみましたが、これを実行すると、レスポンスステータスコードが500になり、スタックトレースも表示されます。ロギングの DelegatingHandler でも、レスポンスは 401 ではなく 500 であることがわかります。

どのように解決するのですか?

を投げているはずです。 HttpResponseException ではなく、APIメソッドから HttpException :

throw new HttpResponseException(HttpStatusCode.Unauthorized);

また、カスタムメッセージを提供したい場合。

var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" };
throw new HttpResponseException(msg);