操作过滤器使用位置(全局控制器操作)

你可以在三个可能的级别放置动作过滤器:

  1. 全局
  2. 调节器
  3. 行动

全局放置过滤器意味着它将对任何路由的请求执行。将一个放在控制器上使其执行对该控制器中任何操作的请求。将一个放在一个动作上意味着它与动作一起运行。

如果我们有这个简单的动作过滤器:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class CustomActionFilterAttribute : FilterAttribute, IActionFilter
{
    private readonly string _location;

    public CustomActionFilterAttribute(string location)
    {
        _location = location;
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Trace.TraceInformation("OnActionExecuting: " + _location);
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        Trace.TraceInformation("OnActionExecuted: " + _location);
    }
}

我们可以通过将其添加到全局过滤器集合来在全局级别添加它。使用典型的 ASP.NET MVC 项目设置,这可以在 App_Start / FilterConfig.cs 中完成。

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CustomActionFilterAttribute("Global"));
    }
}

我们也可以在控制器中添加控制器和动作级别:

[CustomActionFilter("HomeController")]
public class HomeController : Controller
{
    [CustomActionFilter("Index")]
    public ActionResult Index()
    {
        return View();
    }
}

如果我们运行应用程序并查看输出窗口,我们将看到以下消息:

iisexpress.exe Information: 0 : OnActionExecuting: Global
iisexpress.exe Information: 0 : OnActionExecuting: HomeController
iisexpress.exe Information: 0 : OnActionExecuting: Index
iisexpress.exe Information: 0 : OnActionExecuted: Index
iisexpress.exe Information: 0 : OnActionExecuted: HomeController
iisexpress.exe Information: 0 : OnActionExecuted: Global

如你所见,当请求进入时,执行过滤器:

  1. 全局
  2. 调节器
  3. 行动

在全局范围内提供优秀的过滤器示例包括:

  1. 验证过滤器
  2. 授权过滤器
  3. 记录过滤器