Question

Je souhaite appliquer un ActionFilter dans ASP.NET MVC à CHAQUE action que j'ai dans mon application - sur chaque contrôleur.

Existe-t-il un moyen de le faire sans l'appliquer à chaque méthode ActionResult?

Était-ce utile?

La solution

Oui, vous pouvez le faire, mais ce n’est pas comme ça que ça marche. J'ai fait ce qui suit:

  1. Créer une classe de contrôleurs de base et en faire hériter tous vos contrôleurs
  2. Créez un attribut de filtre d'action et faites-le hériter de FilterAttribute et IActionFilter
  3. Décorez votre classe de contrôleur de base avec votre nouvel attribut de filtre d'action

Voici un exemple d'attribut de filtre d'action:

public class SetCultureAttribute : FilterAttribute, IActionFilter 
{ 
    #region IActionFilter implementation

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //logic goes here
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //or logic goes here
    }

    #endregion IActionFilter implementation
}

Voici un exemple de la classe de contrôleur de base avec cet attribut:

[SetCulture]
public class ControllerBase : Controller
{
    ...
}

Si vous utilisez cette méthode tant que vos classes de contrôleur héritent de ControllerBase, le filtre d'action SetCulture sera toujours exécuté. J'ai un échantillon complet et je poste sur ce sur mon blog si vous souhaitez un peu plus de détails.

J'espère que ça aide!

Autres conseils

Comment ça va mieux ... 2 ans plus tard, nous avons

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorElmahAttribute());
    }

Vous n'avez pas besoin de l'appliquer à chaque action, vous pouvez simplement l'appliquer à chaque contrôleur (c'est-à-dire, mettez l'attribut sur la classe, pas la méthode).

Ou, comme Ian l'a mentionné, vous pouvez le placer sur une classe de contrôleur de base, puis l'étendre à partir de ce contrôleur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top