• asp,net core 3.1 的过滤器(筛选器)


    过滤器执行顺序

    • Authorization filters r最先运行,用于确定是否已针对请求为用户授权。 如果请求未获授权,授权筛选器可以让管道短路。
    • Resource filters:
      • 授权后运行。
      • OnResourceExecuting 在筛选器管道的其余阶段之前运行代码。 例如,OnResourceExecuting 在模型绑定之前运行代码。
      • OnResourceExecuted 在管道的其余阶段完成之后运行代码。
    • Action filters:
      • 在调用操作方法之前和之后立即运行代码。
      • 可以更改传递到操作中的参数。
      • 可以更改从操作返回的结果。
      • 页面 支持 Razor 。
    • Exception filters 在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。
    • Result filters 在执行操作结果之前和之后立即运行代码。 仅当操作方法成功执行时,它们才会运行。 对于必须围绕视图或格式化程序的执行的逻辑,它们很有用。
    img

    同步和异步

    当要创建过滤器时,应该实现 IXXXFilter 或 IAsyncXXXFilter,这两个接口的区别是前者同步、后者异步。ASP.NET Core MVC 会首先检查异步实现,如果没有实现异步方式,则继续检查同步实现,因此在创建过滤器时,不需要同步接口和异步接口都实现。

    public interface IAsyncActionFilter : IFilterMetadata
    {
    	Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    }
                                    
    public interface IActionFilter : IFilterMetadata
    {
        void OnActionExecuted(ActionExecutedContext context);
        void OnActionExecuting(ActionExecutingContext context);
    }
    
    public class CustomActionFilter : IActionFilter,IAsyncActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
        // Action执行之前
        }
        public void OnActionExecuted(ActionExecutedContext context)
        {
        //Action执行之后
        }
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
        // Action执行之前
        await next();
        // Action执行之后
        }
    }
    

    OnActionExecutionAsync 方法,该方法的第二个参数ActionExecutionDelegate 表示要执行的 Action,它是一个委托类型,因此在这个方法的内部可以直接调用 next(),并在 next() 前后执行相应的代码。

    筛选器作用域和执行顺序

    可以将筛选器添加到管道中的以下三个 范围 之一:

    • 在控制器操作上使用属性。 筛选器属性不能应用于 Razor 页面处理程序方法。
    • 在控制器或页上使用特性 Razor 。
    • 针对所有控制器、操作和页面全局 Razor 显示,如以下代码所示:
    public void ConfigureServices(IServiceCollection services)
    {
        //2.1 services.AddMvc(...)
        services.AddControllersWithViews(options =>
       {
            options.Filters.Add(typeof(MySampleActionFilter));
        });
    }
    

    扩展:ASP.NET Core 中的筛选器 asp.net core 3.1

    扩展:MVC - 16.MVC过滤器

  • 相关阅读:
    【Example】C++ 标准库智能指针 unique_ptr 与 shared_ptr
    【小记】腾讯云 Linux 虚拟机如何正确修改 hosts 文件
    【Example】C++ 接口概念讲解及例子演示
    Hudi编译(0.10.1版本)
    通过Spark读写Hudi
    Hudi数据管理
    Hudi数据写操作流程
    Hudi核心概念(时间轴、文件管理、索引)
    Hudi初始
    通过Spark操作Hudi(增、删、改、查、增量查)
  • 原文地址:https://www.cnblogs.com/tangge/p/14008429.html
Copyright © 2020-2023  润新知