Quiero aplicar un ActionFilter en ASP.NET MVC a CADA acción que tengo en mi aplicación, en cada controlador.Puede aplicar un ActionFilter en ASP.NET-MVC en CADA acción
¿Hay alguna manera de hacer esto sin aplicarlo a cada método ActionResult?
Quiero aplicar un ActionFilter en ASP.NET MVC a CADA acción que tengo en mi aplicación, en cada controlador.Puede aplicar un ActionFilter en ASP.NET-MVC en CADA acción
¿Hay alguna manera de hacer esto sin aplicarlo a cada método ActionResult?
Sí, puede hacerlo pero no es la forma en que funciona de la caja. Yo lo siguiente:
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!
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.
Cómo las cosas se ponen mejor ... 2 años después tenemos
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorElmahAttribute());
}
basallo: ¿de dónde llamarías esto? o ponlo? –
En global.asax. –
¿Esto sólo afectan ActionResults? ¿O también afecta a otros tipos de resultados? JsonResult, FileResult, etc. –