2009-09-16 2 views

Antwort

4

Nein. Der einfachste Weg, dies zu tun, besteht darin, eine allgemeine Basisklasse zu schreiben, die alle Untertypen des Controllertyps enthält, und dann einen Aktionsfilter auf diese Basisklasse zu setzen oder ihre OnActionExecuting() -Methode zu überschreiben.

+0

10 ... natürlich hängt alles davon ab, was zu tun ist. –

+2

Bitte beachten Sie, dass MVC 3 Unterstützung für globale Filter hinzugefügt hat –

12

Asp.net MVC3 Unterstützung für Global Filters

Vom ScottGu Blog:

ASP.NET MVC unterstützt die Fähigkeit, „cross-cutting“ Logik deklarativ Anwendung einen Mechanismus namens „Filter“. Sie können Filter auf Controller angeben und Aktionsmethoden heute ein Attribut-Syntax wie folgt:

image

Entwickler oft eine Filterlogik über alle Controller in einer Anwendung anwenden möchten. Mit ASP.NET MVC 3 können Sie jetzt angeben, dass ein Filter global auf alle Controller in einer Anwendung angewendet werden soll. Sie können dies jetzt tun, indem Sie es zur GlobalFilters Sammlung hinzufügen. Ein RegisterGlobalFilters() Verfahren wird nun in der Standard-Klasse Global.asax Vorlage enthält einen bequemen Platz zu schaffen, dies zu tun (es wird dann durch die Application_Start() Methode genannt):

image

Die Filteranalyselogik in MVC 3 flexibel, sodass Sie einen globalen Filter konfigurieren können, der nur bedingt angewendet wird, wenn bestimmte Bedingungen erfüllt sind (z. B. Debugging ist aktiviert oder wenn eine Anfrage ein bestimmtes HTTP-Verb verwendet usw.). Filter können jetzt auch aus einem Dependency-Injection-Container (DI) aufgelöst werden.

2

Erstellen Sie eine Klasse, die IActionFilter und/oder IResultFilter Implementiert:

public class FilterAllActions : IActionFilter, IResultFilter 
{  
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 
} 

und registrieren Sie es auf Global.asax

protected void Application_Start() 
    { 
     //... 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     //... 
    } 

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new FilterAllActions()); 
    } 
Verwandte Themen