2013-03-28 13 views
6

Ho un controller con diverse azioni. L'azione dovrebbe essere reindirizzato se il ISCAT campo su un servizio è falso:ASP.Net MVC 4 Utilizzo di attributo o BaseController?

quindi qualcosa di simile:

public ActionResult MyCatAction() 
    { 
     if (MyService.IsCat==false) 
      return RedirectToAnotherControllerAction(); 
    ... 

si può fare in un attributo e applicato al set di tutto il controllore Azioni?

+3

Sconcertante numero di upvotes ... probabilmente mi manca qualcosa come risposta è una ricerca di distanza - risposta top su "filtro d'azione mvc controller" query ... –

risposta

5

Action filter è il modo di andare in questo caso:

filtro Action, che avvolge l'esecuzione metodo dell'azione. Questo filtro può eseguire un'ulteriore elaborazione, ad esempio fornendo dati aggiuntivi al metodo di azione , ispezionando il valore restituito o annullando l'esecuzione del metodo di azione .

Ecco un bel MSDN How To: How to: Create a Custom Action Filter

Nel tuo caso, devi avere qualcosa di simile:

public class RedirectFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (MyService.IsCat==false) 
      return RedirectToAnotherControllerAction(); 
    } 
} 

Poi, si sarebbe applicare questo filtro a livello di controllo (applica a tutte le azioni di controllo)

[RedirectFilterAttribute] 
public class MyController : Controller 
{ 
    // Will apply the filter to all actions inside this controller. 

    public ActionResult MyCatAction() 
    { 

    }  
} 

o per azione:

[RedirectFilterAttribute] 
public ActionResult MyCatAction() 
{ 
    // Action logic 
    ... 
}  
+1

+1. Prendi in considerazione l'aggiunta di uno globale per completare l'elenco: 'GlobalFilters.Filters.Add (new RedirectFilterAttribute());' per essere chiamato da qualche parte all'avvio. –

+0

@LenielMacaferi c'è un modo che applichiamo all'intera classe lasciando una o due azioni? – sandeepKumar

2

Sì.

Understanding Action Filters

Un filtro azione è un attributo. È possibile applicare la maggior parte dei filtri di azione a un'azione di singolo controller o a un intero controller

(E è anche possibile renderlo globale per l'intera applicazione).

1

Sì. È possibile utilizzare un filtro azione e modificare il risultato. Ecco un semplice attributo che farà qualcosa di simile:

public class RedirectOnCat : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if(MyService.IsCat == false) 
      filterContext.Result = new RedirectResult(/* whatever you need here */); 
    } 
} 

Si potrebbe anche ignorare OnActionExecuted sul controller in un modo molto simile.