您可以在 ASP.NET-MVC 中的每个操作上应用 ActionFilter
-
19-08-2019 - |
题
我想申请一个 动作过滤器 在 ASP.NET MVC 中到我的应用程序中的每个操作 - 在每个控制器上。
有没有办法做到这一点而不将其应用于每个 ActionResult 方法?
解决方案
是的,您可以这样做,但这不是开箱即用的方式。我做了以下事情:
- 创建一个基本控制器类并让所有控制器继承它
- 创建一个动作过滤器属性并让它继承 FilterAttribute 和 IActionFilter
- 使用新的操作过滤器属性装饰您的基本控制器类
以下是操作过滤器属性的示例:
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());
}
您不必将它应用到每一个动作,你可以把它应用到每个控制器(即把属性的类,而不是方法)。
或者,作为伊恩提到的,可以把它放在一个基座控制器类,然后从该控制器延伸。
不隶属于 StackOverflow