我想将 ASP.NET MVC 中的ActionFilter应用于我的应用程序中的每个操作 - 在每个控制器上。
有没有办法在不将其应用于每个 ActionResult 方法的情况下做到这一点?
我想将 ASP.NET MVC 中的ActionFilter应用于我的应用程序中的每个操作 - 在每个控制器上。
有没有办法在不将其应用于每个 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());
}
您不必将其应用于每个操作,您只需将其应用于每个控制器(即,将属性放在类上,而不是方法上)。
或者,正如 Ian 所提到的,您可以将其放在基本控制器类上,然后从该控制器扩展。