2017-02-28 8 views
5

私のWebAPIプロジェクトでは、[Authorize]属性で装飾されたapiの数があります。WebAPIでAuthorizeが失敗した場合のカスタムメッセージの返信方法

[Authorize] 
public HttpResponseMessage GetCustomers() 
{ 
    //my api 
} 

ユーザに正しいトークンがない場合、アクセス拒否例外がユーザに返されます。

私が必要とするのは、このような場合にカスタム応答メッセージを返す必要があるということです。

{ 
    "StatusCode" : 403, 
    "message": "You donot have sufficient permission" 
} 

承認が失敗した場合にこのカスタムメッセージを返信する方法を教えてください。

ご注意:私はOwin使用しています

  • - トークンに基づく認証を。
  • 私はではありません。私のデータベースまたは他の場所にアクセストークンを格納しています。
+0

ここに回答があります:http://stackoverflow.com/questions/20149750/owin-unauthorised-webapi-call-returning-login-page-rather-than-401 –

+0

http://stackoverflow.com/question/2578756/how-to-make-authorize-attribute-return-custom-403-error-page-redirectの代わりに –

答えて

9

あり、これを行うにはさまざまな方法がありますが、最善の方法の一つは、カスタムの認可attributes.YouはちょうどAuthorizeAttributeを継承し、それのHandleUnauthorizedRequest()メソッドをオーバーライドする必要がありますすることができます。

public class CustomAuthorization : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
    { 
     actionContext.Response = new HttpResponseMessage 
     { 
      StatusCode = HttpStatusCode.Forbidden, 
      Content = new StringContent("You are unauthorized to access this resource") 
     }; 
    } 
} 

と(CustomAuthorizationインプレースAuthorizeの使用すべきである)のように、これを使用

[CustomAuthorization]  
    public IHttpActionResult Get() 
    { 
     return Ok(); 
    } 

そうしないと、あなたはまた、クライアント側でステータスコードをキャッチし、お好みのカスタムメッセージを表示することができます。

+0

ありがとうございました:)私の要求に応えました。あなたが言及したように、私はあなたがもう一つの方法を追加することができれば感謝します –

+0

他の方法はクライアント側で例外を処理するか、グローバルアプリケーションレベルで例外を処理することができますが、私の知識に従って上で言及した最良の方法 –

+1

。いいね。もう一度ありがとう:) –

関連する問題