Я хочу применить ActionFilter в ASP.NET MVC для КАЖДОГО действия в моем приложении - на каждом контроллере.
Есть ли способ сделать это, не применяя его к каждому методу ActionResult?
Я хочу применить ActionFilter в ASP.NET MVC для КАЖДОГО действия в моем приложении - на каждом контроллере.
Есть ли способ сделать это, не применяя его к каждому методу ActionResult?
Да, вы можете это сделать, но это не так, как это работает из коробки. Я сделал следующее:
Вот образец атрибута фильтра действий:
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
}
Вот образец базового класса контроллера с этим атрибутом:
[SetCulture]
public class ControllerBase : Controller
{
...
}
При использовании этого метода, если классы вашего контроллера наследуются от ControllerBase, всегда будет выполняться фильтр действий SetCulture. У меня есть полный образец и размещаю на этом в моем блоге, если вы хотите поподробнее.
Надеюсь, это поможет!
Как дела налаживаются ... 2 года спустя у нас
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorElmahAttribute());
}
Вам не нужно применять его к каждому действию, вы можете просто применить его к каждому контроллеру (т. Е. Поместить атрибут в класс, а не в метод).
Или, как упоминал Ян, вы можете поместить его в базовый класс контроллера, а затем расширить его.