2012-01-03 2 views
4

Peut-être que j'ai mal compris le point de ActionFilterAttribute, mais ce que j'ai maintenant les suivantes:ActionFilterAttribute est obtenir appelé pour toutes les actions

public class MyCustomAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    //do something useful here 
    } 
} 

Puis dans mon contrôleur Home, j'ai les méthodes d'action suivantes:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
    return View(); 
    } 

    [MyCustom] 
    public ActionResult Test() 
    { 
    return View(); 
    } 
} 

ce que je me attends est maintenant que OnActionExecuting est déclenché lorsque je tente d'accéder au /Home/Test, mais pas quand je tente d'accéder /Home/Index.

Cependant, il est déclenché pour les deux méthodes d'action. J'ai également vérifié dans OnActionExecuting qu'il y a en fait l'action Index qui s'appelle.

Est-il possible que OnActionExecuting soit appelée uniquement lorsque vous appelez une méthode d'action marquée avec l'attribut?

+0

supprime celui qui est présent dans global.asax. – user960567

Répondre

6

Vérifiez si MyCustomAttribute est présent dans la collection GlobalFilters dans Global.asax.

+0

Cela l'a résolu. Il a commencé comme un filtre global avant que je l'ai fait dans un filterattribute à la place. Merci beaucoup! –

+0

@ ØyvindKnobloch-Bråthen Pouvez-vous nous expliquer ce que vous avez fait pour le résoudre? J'ai le même problème, si je l'ajoute aux filtres globaux, il s'exécute sur chaque action. Si je ne l'ajoute pas, alors il ne s'exécute jamais. Où devrais-je l'ajouter? Je ne vois pas un autre type de filtres pour l'ajouter. – Kyle

+0

Vous ne devriez pas avoir besoin de l'ajouter n'importe où spécial. Si vous le déboguez, pouvez-vous vérifier s'il entre dans OnActionExecuting? –

Questions connexes