ASP.NET Core MVC 过滤器介绍
原文:
ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理。使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码。 过滤器如何工作?过滤器在 MVC Action 调用管道中运行,有时称为过滤器管道。MVC选择要执行的Action方法后,才会执行过滤器管道: 实现过滤器同时支持同步和异步两种不同的接口定义。您可以根据执行的任务类型,选择同步或异步实现。 同步过滤器定义OnStageExecuting和OnStageExecuted方法,会在管道特定阶段之前和之后运行代码的。例如 public class SampleActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // do something before the action executes } public void OnActionExecuted(ActionExecutedContext context) { // do something after the action executes } } 异步过滤器定义了一个OnStageExecutionAsync方法。该方法提供了FilterTypeExecutionDelegate的委托,当调用该委托时会执行具体管道阶段的工作。例如, public class SampleAsyncActionFilter : IAsyncActionFilter { public async Task OnActionExecutionAsync( ActionExecutingContext context,ActionExecutionDelegate next) { // do something before the action executes await next(); // do something after the action executes } } 您可以在单个类中实现多个过滤器接口。例如,ActionFilterAttribute抽象类实现了
过滤器类型ASP.NET Core 有以下五种类型的过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:
过滤器运行顺序ASP.NET Core 的每个请求都会先经过已注册的 图片来自 John Wu 的博客
过滤器的作用域与执行顺序过滤器具有三种不同级别的作用域。您可以通过 public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader","Result filter added to MvcOptions.Filters")); // an instance options.Filters.Add(typeof(SampleActionFilter)); // by type options.Filters.Add(new SampleGlobalActionFilter()); // an instance }); services.AddScoped<AddHeaderFilterWithDi>(); } } 示例来自于ASP.NET Core MVC 英语文档 默认执行顺序当管道的某个阶段存在多个过滤器时,过滤器执行的默认顺序由作用域确定:全局过滤器优先于控制器过滤器,控制器过滤器优先于Action方法过滤器。
覆盖默认执行顺序您可以通过实现 [MyFilter(Name = "Controller Level Attribute",Order=1)] 如果您将上述示例中 Action 过滤器的
过滤器执行时, 总结今天我们已经了解了关于过滤器基本知识,在下一篇博客中,我们将介绍内置过滤器、过滤的使用、依赖注入、取消与截断等知识,谢谢! 参考资料
转载请注明出处,原文链接:http://www.cnblogs.com/tdfblog/p/filters-in-aspnet-core-mvc.html。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Microsoft Report Viewer 2010部署
- 禁用某些控件的ASP.NET视图状态,但不是全部
- ASP.NET MVC 4和Entity Framework 5.0中的MySQL连接 – 多个
- 单元测试 – 使用HttpRequestMessage对Azure功能进行单元测
- Response.Redirect()vs Response.RedirectPermanent()
- asp.net-mvc-3 – 没有表单身份验证的AntiForgeryToken
- asp.net – 如何设置IHttpAsyncHandler超时?
- ASP.NET会员密码到期
- asp.net-mvc – 从一个项目到另一个项目调用控制器
- asp.net – 使用多语言支持的“正确”方式
- 从.NET开始 – ASP.NET,WPF,Silverlight或命令行
- asp.net-mvc – 默认模型绑定抛出“没有为此对象
- asp.net – Windows Azure VM网站设置
- asp.net-mvc – 为什么HttpContext.Current在asp
- asp.net – Orchard CMS Media中的文件大小上传限
- .NET Framework 3.5中有哪些有用的新ASP.NET功能
- asp.net-mvc – ASP.NET MVC是否为区域创建默认路
- asp.net-mvc-3 – 访问帮助程序中的全局页面变量
- asp.net-mvc – 从Visual Web Developer Express
- asp.net-mvc – ScriptBundle(“?/ Scripts / ve