Можете ли вы применить ActionFilter в ASP.NET-MVC для КАЖДОГО действия
-
19-08-2019 - |
Вопрос
Я хочу применить 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());
}
Вам не нужно применять его к каждому действию, вы можете просто применить его к каждому контроллеру (т. е. поместить атрибут в класс, а не в метод).
Или, как упомянул Ян, вы можете поместить его в базовый класс контроллера, а затем расширять его с этого контроллера.