2017-03-16 4 views
0

基本的なトークンの検証を行うカスタムフィルター属性を作成しました。だから私はちょうどそれが正常に動作すると見ていくつかの行を追加することから始めましたが、何らかの理由でそれは動作していません。Web APIカスタムフィルターが起動しない

カスタムフィルタクラス

/// <summary> 
/// Basic Token Based Authitication 
/// </summary> 
public class BasicTokenValidation : ActionFilterAttribute 
{ 
    /// <summary> 
    /// Validate Token 
    /// </summary> 
    /// <param name="actionContext"></param> 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     HttpContext.Current.Response.Write(" filter1 "); 
     Debug.WriteLine("Executing My Filter!"); 
     if (actionContext.Request.Headers.Authorization == null) 
     { 
      actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
     } 
     else { 
      string authToken = actionContext.Request.Headers.Authorization.Parameter; 
     } 

     base.OnActionExecuting(actionContext); 
    } 
} 

私はここでWebApi.config

config.Filters.Add(new BasicTokenValidation()); 

でそれを登録し、私は

[HttpGet] 
[Route("get/all")] 
[BasicTokenValidation] 
public IHttpActionResult GetAll() 
{ 
    try 
    { 

     // Some Code 
    } 
    catch (Exception ex) 
    { 
     return InternalServerError(ex); 
    } 
} 

ていない場合は必ず私のコントローラメソッドを飾った方法です私は欲しい何か他のものを設定する。いくつかの記事や記事を読んだり、カスタムフィルターを作成するために必要なものがいくつかありました。

ご協力いただければ幸いです。

ありがとうございました

+0

BasicTokenValidationクラスを表示できますか? – Win

+0

編集を参照してください、クラスを追加しました – Gericke

答えて

3

あなたのアクションフィルターが機能しています。 MVAPアセンブリSystem.Web.Http.Mvcの代わりにWebAPIアセンブリSystem.Web.Http.Filtersを確実に使用できますか?

using System.Diagnostics; 
using System.Web; 
using System.Web.Http.Controllers; 
using System.Web.Http.Filters; <--- WebAPI assembly 

namespace YOURNAMESPACE 
{ 
    public class BasicTokenValidation : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext actionContext) 
     { 
      HttpContext.Current.Response.Write(" filter1 "); 
      Debug.WriteLine("Executing My Filter!"); 
      if (actionContext.Request.Headers.Authorization == null) 
      { 
       actionContext.Response = 
        new System.Net.Http.HttpResponseMessage(
         System.Net.HttpStatusCode.Unauthorized); 
      } 
      else 
      { 
       string authToken = actionContext.Request.Headers.Authorization.Parameter; 
      } 

      base.OnActionExecuting(actionContext); 
     } 
    } 
} 

あなたがグローバル BasicTokenValidationアクションフィルタを登録しているので、あなたは私がSOに答えBasic Authentication using DelegatingHandlerで見たいと思うかもしれません。

+0

フィルター用にWebAPIアセンブリを使用しています。私がチェックした最初のことでした。それで、グローバルにしたくない場合は、WebApi.configからそれを削除し、フィルタリングしたいメソッドやコントローラだけを飾る必要がありますか? – Gericke

+0

はい、正しく入力してください。必要がなければ、アクションフィルタをグローバルに登録する必要はありません。 – Win

+0

ありがとうございました。私はあなたのSOの答えを見て、それが私の構造を実装する方法についてそれを見て、私は忙しい構築しています。 – Gericke

関連する問題