如何将ASP.NET Core WebAPI筛选器转换为?
摘要:一、筛选器 通过使用筛选器可在请求处理管道中的特定阶段之前或之后运行代码。 这即是我们经常听到的面向切面编程AOP(Aspect Oriented Programming)技术,AOP通过预编译方式和运行期间动态代理实现程序功能的统一维护的
一、筛选器
通过使用筛选器可在请求处理管道中的特定阶段之前或之后运行代码。
这即是我们经常听到的面向切面编程AOP(Aspect Oriented Programming)技术,AOP通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
筛选器在 ASP.NET Core 操作调用管道(有时称为筛选器管道)内运行。 筛选器管道在 ASP.NET Core 选择了要执行的操作之后运行:
Asp.Net Core 关注的切面点 包括错误处理、缓存、配置、授权和日志记录筛选器,这个是说通过筛选器可以实现对以上关注点的一些操作。
在Asp.Net Core中有如下几种类型的筛选器:
其中部分是内置筛选器,比如授权,响应缓存已经帮我们内置进了框架,我们只需要配置即可使用;其他筛选器是可以自定义处理逻辑的。
下图展示了筛选器类型在筛选器管道中的交互方式和执行顺序:
二、操作型筛选器
第一部分主要是对筛选器的一个梳理,有些重点的提炼,详情查看文档,因为文档部分理解起来比较晦涩,比如关注点是关注点,知识说筛选器可以对这些关注点启到作用,筛选器是固定的几种,不要被文档中的这种描述搞晕了,一会儿有这几种,怎么到下面又是另外几种,要注意区分重点。
操作筛选器可以实现接口IActionFilter,在接口中有两个方法,OnActionExecuting 在调用操作方法之前执行。 OnActionExecuted 在操作方法返回之后执行。
先建WebAPI项目 WebAPI_Filter
建一个 FilterController,并创建Get请求Test
namespace WebAPI_Filter.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class FilterController : ControllerBase
{
[HttpGet]
public string Test()
{
return "测试Filter!";
}
}
}
创建ActionFilter 筛选器
namespace WebAPI_Filter.Filter
{
public class MyActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine(context.HttpContext.Request.GetDisplayUrl()+ " 执行之后!");
}
public void OnActionExecuting(ActionExecutingContext context)
{
Console.WriteLine(context.HttpContext.Request.GetDisplayUrl() + " 执行之前!");
}
}
}
在Program.cs里面添加筛选器
执行测试接口
三、筛选器作用域和执行顺序
上面直接在Program.cs里面添加筛选器的方式称为全局筛选器,所有控制器、操作都会受全局筛选器影响。还有一种筛选器实现方式是属性筛选器,通过继承属性类然后将属性标签放置在控制器或者操作上。
新建两个属性类MyAttributeFilter 用于Controller控制器类,MyOPAttributeFilter用于操作方法上。
