2016-07-04 10 views
0

私はいくつかのAPIアクションを持っています。これは、OnMethodBoundaryAspectのアスペクトを含んでいます。 私はこのようなリクエストで送信されたトークンの検証を行います。ポストシャープで不正な結果を返します。OnMethodBoundaryAspect

[Serializable] 
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)] 
public class TokenCallHandler : OnMethodBoundaryAspect 
{ 
    /// <summary> 
    /// Methodo responsável por validar o token enviado pelo usuário 
    /// </summary> 
    /// <param name="args"></param> 
    public override void OnEntry(MethodExecutionArgs args) 
    { 
     ApiController apiController = (ApiController)args.Instance; 
     var context = apiController.ControllerContext; 
     HttpRequestHeaders headers = context.Request.Headers; 
     bool validToken = false; 
     if (headers.Contains("X-Authorization")) 
     { 
      var authorization = headers.GetValues("X-Authorization"); 
      var token = authorization.ToList().FirstOrDefault(); 
      if (token == null) 
       token = "invalid"; 

      validToken = TokenUtil.ValidateToken(token); 

     } 

     if (!validToken) 
      args.ReturnValue = new UnauthorizedAccessException(); 



    } 

} 

しかし、それはAPIでメソッドを実行し続ける、私は401例外を返したいと思います。私はそれがその中に不正に500(内部サーバーエラー)を返す新しいUnauthorizedExceptionを投げるんが、私は必要な場合

私はwep.apiアクションでキャプチャすることができますどのように側面が返さ?

答えて

0

ASP.NET Web API : Correct way to return a 401/unauthorised responseで述べたように、

あなたはargs.ReturnValueを設定することにより、あなたのAPIメソッド

からHttpResponseExceptionを投げるべきである、あなたはあなたの側面によって強化メソッドの戻り値を変更しています、代わりに例外をスローすることになっています。

だから、最後の行は

throw new HttpResponseException(HttpStatusCode.Unauthorized);

それとも、あなたはカスタムメッセージを供給したい場合は次のようになります。

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

をあなたはまた、(MethodInterceptionAspectを使用して検討するかもしれませんhttp://doc.postsharp.net/method-interception)、メソッドの実行をラップしていないのに、それを黙ること。

関連する問題