2012-10-15 38 views
9

i'hv註冊寫我自己的行動過濾器和在Global.asax文件註冊,現在我的問題是我如何跳過 這個過濾器的具體行動,我沒想過這個由創建一個自定義屬性例如DontValidate 並將其放在我想要跳過驗證的動作上,並且在我的動作過濾器代碼中,我將提出一個條件,如果動作包含 DontValidate屬性,則跳過驗證。所以,目前我沒有得到如何 實現它:跳過特定操作過濾器時動作濾波器全球

下面的代碼是我的驗證行爲過濾

public class ValidationActionFilter : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext context) 
     { 
      if (context.Request.Method.ToString() == "OPTIONS") return; 
      //bool dontValidate = context.ActionDescriptor. // here im stuck how to do 
      var modelState = context.ModelState; 
      if (!modelState.IsValid) 
      { 
       JsonValue errors = new JsonObject(); 
       foreach (var key in modelState.Keys) 
       { 
        // some stuff 
       } 

       context.Response = context.Request.CreateResponse<JsonValue>(HttpStatusCode.BadRequest, errors); 
      } 
     } 
    } 

回答

22

你可以得到的是被用來裝飾從ActionDescriptor財產控制器動作的屬性列表的背景:

public class ValidationActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext context) 
    { 
     if (context.ActionDescriptor.GetCustomAttributes<DontValidateAttribute>().Any()) 
     { 
      // The controller action is decorated with the [DontValidate] 
      // custom attribute => don't do anything. 
      return; 
     } 

     if (context.Request.Method.ToString() == "OPTIONS") return; 
     var modelState = context.ModelState; 
     if (!modelState.IsValid) 
     { 
      JsonValue errors = new JsonObject(); 
      foreach (var key in modelState.Keys) 
      { 
       // some stuff 
      } 

      context.Response = context.Request.CreateResponse<JsonValue>(HttpStatusCode.BadRequest, errors); 
     } 
    } 
} 
+1

非常感謝你達林.. – Meson

+0

大家好。 你能解釋一下請,如何我要註冊這個過濾器進入我的應用程序? – mrabaev48