我想在ASP.NET MVC中将ActionFilter应用到我的应用程序中的每个操作 - 在每个控制器上。
有没有办法在不将其应用于每个ActionResult方法的情况下执行此操作?
答案 0 :(得分:9)
是的,你可以这样做,但它不是开箱即用的方式。我做了以下事情:
以下是动作过滤器属性的示例:
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操作过滤器。如果您想了解更多细节,我会在此on my blog上提供完整的样本和帖子。
希望有所帮助!
答案 1 :(得分:4)
事情如何变得更好...... 2年后我们有了
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorElmahAttribute());
}
答案 2 :(得分:0)
您不必将其应用于每个操作,您只需将其应用于每个控制器(即将属性放在类上,而不是方法上)。
或者,正如Ian所提到的,您可以将它放在基本控制器类上,然后从该控制器扩展。