2012-10-15 12 views
9

Ho scritto il mio filtro azione e registrato nel file global.asax, ora il mio problema è come saltare questo filtro per azioni specifiche, ho pensato a questo da creando un attributo personalizzato per es. DontValidate e posizionalo sull'azione per cui voglio saltare la convalida e nel mio codice del filtro azione inserirò una condizione che, se l'azione contiene l'attributo DontValidate, salta la convalida. Quindi attualmente Non ricevo come implementarlo:Ignora filtro su azione particolare quando il filtro azione è registrato globalmente

sotto il codice è il mio filtro azione convalida

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

risposta

22

Si potrebbe ottenere l'elenco degli attributi che sono stati utilizzati per decorare l'azione di controllo dalla proprietà ActionDescriptor del contesto:

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

grazie mille Darin .. – Meson

+0

Ciao a tutti. Puoi spiegare pls, come dovrei registrare questo filtro nella mia app? – mrabaev48

Problemi correlati