2010-07-26 3 views
5

Est-il possible de créer un filtre d'action global qui s'appliquera automatiquement à toutes les actions de tous les contrôleurs de l'application ASP.NET MVC? Je veux quelque chose comme "before_filter" défini dans ApplicationController dans Ruby on Rails.Filtre d'action globale dans ASP.NET MVC

Nous vous remercions de votre aide.

+0

Vous pouvez essayer d'utiliser la bibliothèque [FluentFilter] (http://fluentfilters.codeplex.com/). –

Répondre

3

Cela dépend vraiment de ce que vous voulez faire avec. Dans de nombreux scénarios, les réponses précédentes de vucetica et Adeel seront ce que vous voulez réellement faire. Cependant, aucun d'entre eux ne répond aux critères que vous avez énumérés: automatiquement s'appliquent à tous les actions/contrôleurs. Pour faire quelque chose comme ça, vous devez implémenter un gestionnaire pour l'événement Application BeginRequest dans Global.asax. Voir le MSDN documentation pour plus d'informations.

Mise à jour - 27 juillet 2010: ScottGu blogged about MVC 3 Preview 1, qui inclut un cadre pour les filtres globaux dont vous parlez. Ils sont enregistrés via Global.asax et peuvent s'appliquer à tous les contrôleurs ou en fonction de critères spécifiques.

+0

Merci pour votre réponse. D'abord je pensais que cela fonctionnerait mais après avoir essayé cette approche j'ai remarqué que Application_BeginRequest obtient TOUTES les demandes, y compris les demandes pour .js, .css, .jpg et d'autres ressources pour la page. Donc, il serait exécuté plusieurs fois pour une page et peut être une surcharge sérieuse. Existe-t-il un moyen simple de filtrer uniquement la requête pour le contenu de la page et d'ignorer toutes les requêtes .js, .css, .jpg sans analyser l'URL demandée? – Evgenii

+0

Vous pouvez peut-être consulter les informations provenant du moteur de routage pour déterminer si vous avez affaire à un contrôleur/une action. Honnêtement, la réponse d'Adeel est la * bonne * façon de faire quelque chose comme ça, je soulignais simplement que c'est l'alternative si vous vouliez un gestionnaire automatique et global. – GalacticCowboy

+1

Si vous ne voulez pas attendre MVC3, mon collègue a écrit quelque chose que nous utilisons pour faire correspondre automatiquement les filtres avec les actions (soit toujours, ou en fonction d'une condition). Cela dépend de Windsor pour IOC mais vous pouvez toujours modifier cette partie. http://geekswithblogs.net/wesm/archive/2009/12/11/ijoined-filter.aspx – Ryan

3

Créez votre propre contrôleur de base et héritez de celui-ci.

+0

Merci, ça devrait marcher, mais je cherche une approche très simple qui ne nécessite pas beaucoup de codage. – Evgenii

+2

@vucetice Vous devriez privilégier la composition par rapport à l'héritage –

Questions connexes