2012-11-20 3 views
3

J'ai ce filtre d'action personnalisé:ActionFilterAttribute n'est pas appelé

public class PermissionChecker: ActionFilterAttribute 
{ 
    private int _permissionId { get; set; } 
    private IUserSelectorService _userService { get; set; } 

    public PermissionChecker(int permissionId) 
    { 
     _permissionId = permissionId; 
     _userService = new UserSelectorService(); 
    } 

    public PermissionChecker(int permissionId, IUserSelectorService userService) 
    { 
     _permissionId = permissionId; 
     _userService = userService; 
    } 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     base.OnActionExecuting(actionContext); 
    } 
} 

et je l'ai mis dans mon action:

public class HomeController : Controller 
{ 
    [PermissionChecker(1)] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

mais il ne fonctionne pas! le code ne passe pas dans onActionExecuting même dans le constructeur de PermissionChecker.

Répondre

5

La signature de votre OnActionExecuting n'est pas correct, il devrait avoir ActionExecutingContext:

Fournit le contexte de la méthode ActionExecuting de la classe ActionFilterAttribute.

public override void OnActionExecuting(ActionExecutingContext filterContext){ 
    base.OnActionExecuting(filterContext); 
} 
+0

Mais j'utilise MVC 4, pas 3. – MuriloKunze

+0

qui n'est pas MVC3 spécifique, il en va de mvc4 ainsi – dove

+0

lien ajouté à la référence msdn – dove