在ASP.NET Core中,筛选器(Filter)是一种强大的机制,允许开发者在请求处理管道的特定阶段之前或之后运行自定义代码,以下是关于ASP.NET Core筛选器的详细解释:
一、筛选器的工作原理
1、定义:筛选器在ASP.NET Core操作调用管道(有时称为筛选器管道)内运行,这个管道在ASP.NET Core选择了要执行的操作之后开始运行。
2、类型:每种筛选器类型都在筛选器管道中的不同阶段执行,包括授权筛选器、资源筛选器、操作筛选器、异常筛选器、结果筛选器等。
二、筛选器的类型及使用方式
1、授权筛选器(Authorization Filter)
特点:最先运行,用于确定是否已针对请求为用户授权,如果请求未获授权,授权筛选器可以让管道短路。
实现:可以通过实现IAsyncAuthorizationFilter
接口来创建自定义授权筛选器,检查用户是否具有特定的角色或权限。
2、资源筛选器(Resource Filter)
特点:在授权筛选器之后运行。OnResourceExecuting
在筛选器管道的其余阶段之前运行代码,而OnResourceExecuted
在管道的其余阶段完成之后运行代码。
实现:通过实现IResourceFilter
或IAsyncResourceFilter
接口来创建资源筛选器。
3、操作筛选器(Action Filter)
特点:在调用操作方法之前和之后立即运行,可以更改传递到操作中的参数,也可以更改从操作返回的结果,但不可应用于Razor Pages。
实现:继承自ActionFilterAttribute
或实现IActionFilter
/IAsyncActionFilter
接口。
4、异常筛选器(Exception Filter)
特点:在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。
实现:实现IExceptionFilter
或IAsyncExceptionFilter
接口。
5、结果筛选器(Result Filter)
特点:在执行操作结果之前和之后立即运行代码,仅当操作方法成功执行时才会运行,对于必须围绕视图或格式化程序的执行的逻辑很有用。
实现:实现IResultFilter
或IAsyncResultFilter
接口。
三、筛选器的注册与使用
1、全局注册:可以在Startup.cs
的ConfigureServices
方法中,通过配置MvcOptions
的Filters
属性来全局注册筛选器。
2、局部注册:可以将筛选器应用于特定的控制器或操作方法上,通过使用特性(Attribute)的方式。
四、筛选器的同步与异步实现
1、同步筛选器:在其管道阶段之前和之后运行代码,如OnActionExecuting
在调用操作方法之前调用,而OnActionExecuted
在操作方法返回之后调用。
2、异步筛选器:定义OnStageExecutionAsync
方法,如OnActionExecutionAsync
,运行时会先查看筛选器是否实现了异步接口,如果是,则调用该接口;否则,调用同步接口的方法。
五、内置筛选器属性
1、ASP.NET Core包含许多可子类化和自定义的基于属性的内置筛选器,如ResponseHeaderAttribute
用于向响应添加标头。
六、筛选器的应用示例
以下是一个使用操作筛选器的简单示例:
1、创建自定义操作筛选器:创建一个继承自ActionFilterAttribute
的类,并重写OnActionExecuting
和OnActionExecuted
方法(或相应的异步方法)。
2、应用筛选器:将自定义筛选器作为特性应用于控制器类或特定的操作方法上。
ASP.NET Core中的筛选器提供了一种灵活且强大的方式来在请求处理管道的不同阶段插入自定义逻辑,从而增强了应用程序的可扩展性和可维护性。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1627419.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复