2012-10-15 16 views
9

i'hv kendi eylem filtresini yazdı ve global.asax dosyasında kayıtlı, şimdi benim sorunum, bu eylemi özel bir eylem için nasıl atlayabilirim? Örneğin, DontValidate için özel bir öznitelik oluşturmak ve doğrulamayı atlamak istediğim eylemin üzerine yerleştirmek ve eylem filtresi kodumda, eylemin DontValidate özniteliğini içermesi durumunda, doğrulamayı atlaması için bir koşul koyacağım. Yani şu anda ben nasıl uygulanacağı konusu alamıyorum: kodunun altınaBaşa Dön Filtreyi atla Action eylemi global olarak kaydediliyor eylem

benim doğrulama eylem filtresi

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); 
      } 
     } 
    } 

cevap

22

Sen ActionDescriptor özelliğinden denetleyici eylemini süslemek için kullanıldı niteliklerin listesini alabilir Bu bağlamda:

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

Çok teşekkürler Darin .. – Meson

+0

Herkese merhaba. Lütfen bu filtreyi uygulamamda nasıl kaydettirmem gerektiğini pls açıklayabilir misiniz? – mrabaev48

İlgili konular