2009-03-16 18 views

Respuesta

9

Sí, puede hacerlo pero no es la forma en que funciona de la caja. Yo lo siguiente:

  1. Crear una clase de controlador de base y tener todos los controladores de heredar de que
  2. Crear un atributo del filtro acción y que herede de FilterAttribute y IActionFilter
  3. Decora tu clase controlador base con su nuevo atributo de filtro de acción

He aquí una muestra de la acción atributo de filtro:

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 
} 

He aquí una muestra de la clase de controlador de base con este atributo:

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

Usando este método, siempre y cuando sus clases de controlador hereda de ControllerBase entonces el filtro de acción setCulture siempre sería ejecutado. Tengo una muestra completa y publico en este on my blog si desea un poco más de detalle.

Espero que ayude!

+0

¿Esto sólo afectan ActionResults? ¿O también afecta a otros tipos de resultados? JsonResult, FileResult, etc. –

0

No tiene que aplicarlo a cada acción, puede aplicarlo a cada controlador (es decir, poner el atributo en la clase, no el método).

O, como mencionó Ian, puede ponerlo en una clase de controlador base y luego extender desde ese controlador.

4

Cómo las cosas se ponen mejor ... 2 años después tenemos

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

basallo: ¿de dónde llamarías esto? o ponlo? –

+0

En global.asax. –

Cuestiones relacionadas