2012-10-15 16 views
9

i'hv napisał mój własny filtr działania i zarejestrowany w pliku global.asax, teraz mój problem polega na tym, jak pomijam ten filtr dla konkretnych działań, pomyślałem o tym przez tworzenie niestandardowego atrybutu dla np. DontValidate i umieszczenie go nad akcją, dla której chcę pominąć sprawdzanie poprawności, iw moim kodzie filtru akcji umieszczę warunek, że jeśli akcja zawiera atrybut DontValidate, pomiń sprawdzanie poprawności. Tak więc obecnie nie otrzymuję, jak wdrożyć go:Pomiń filtr na konkretnej akcji, gdy filtr akcji jest zarejestrowany globalnie

poniżej kod jest mój filtr działanie walidacji

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

Odpowiedz

22

Można uzyskać listę atrybutów, które zostały wykorzystane do dekoracji działanie kontrolera z właściwości ActionDescriptor w kontekście:

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

dziękuję bardzo Darin .. – Meson

+0

Witam wszystkich. Czy możesz wyjaśnić, w jaki sposób powinienem zarejestrować ten filtr w mojej aplikacji? – mrabaev48

Powiązane problemy