我想申请一个 动作过滤器 在 ASP.NET MVC 中到我的应用程序中的每个操作 - 在每个控制器上。

有没有办法做到这一点而不将其应用于每个 ActionResult 方法?

有帮助吗?

解决方案

是的,您可以这样做,但这不是开箱即用的方式。我做了以下事情:

  1. 创建一个基本控制器类并让所有控制器继承它
  2. 创建一个动作过滤器属性并让它继承 FilterAttribute 和 IActionFilter
  3. 使用新的操作过滤器属性装饰您的基本控制器类

以下是操作过滤器属性的示例:

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());
    }

您不必将它应用到每一个动作,你可以把它应用到每个控制器(即把属性的类,而不是方法)。

或者,作为伊恩提到的,可以把它放在一个基座控制器类,然后从该控制器延伸。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top