操作过滤器使用位置(全局控制器操作)
你可以在三个可能的级别放置动作过滤器:
- 全局
- 调节器
- 行动
全局放置过滤器意味着它将对任何路由的请求执行。将一个放在控制器上使其执行对该控制器中任何操作的请求。将一个放在一个动作上意味着它与动作一起运行。
如果我们有这个简单的动作过滤器:
[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
如你所见,当请求进入时,执行过滤器:
- 全局
- 调节器
- 行动
在全局范围内提供优秀的过滤器示例包括:
- 验证过滤器
- 授权过滤器
- 记录过滤器