2009-09-16 32 views

Respuesta

4

No. La forma más sencilla de hacer esto es escribir una clase base común que todos los tipos de controlador de la subclase, luego pegar un filtro de acción en esa clase base o anular su método OnActionExecuting().

+0

... por supuesto, todo depende de lo que se necesite hacer. –

+2

Tenga en cuenta que MVC 3 agregó soporte para filtros globales –

12

Asp.net MVC3 añadió soporte para Global Filters

Desde el blog ScottGu:

ASP.NET MVC soporta la capacidad de aplicar declarativa lógica “transversal” utilizando un mecanismo llamado “filtros”. Puede especificar filtros en los controladores y los métodos de acción de hoy usando una sintaxis de atributo de este modo:

image

desarrolladores a menudo quieren aplicar un poco de lógica del filtro en todos los controladores dentro de una aplicación. ASP.NET MVC 3 ahora le permite especificar que un filtro debe aplicarse globalmente a todos los Controladores dentro de una aplicación. Ahora puede hacer esto agregándolo a la colección GlobalFilters. Un método RegisterGlobalFilters() se incluye ahora en la plantilla de clase Global.asax predeterminado para proporcionar un lugar conveniente para hacer esto (que a continuación se llama por el método Application_Start()):

image

La resolución lógica del filtro en MVC 3 es flexible para que pueda configurar un filtro global que solo se aplica condicionalmente si se cumplen ciertas condiciones (por ejemplo: la depuración está habilitada, o si una solicitud utiliza un verbo http particular, etc.). Los filtros también pueden resolverse ahora desde un contenedor de Inyección de Dependencia (DI).

2

Crear una clase que implementa IActionFilter y/o IResultFilter:

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(); 
    } 
} 

y registrarlo en Global.asax

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

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new FilterAllActions()); 
    } 
Cuestiones relacionadas