小白开学Asp.Net Core 《五》

时间:2019-08-13 09:48 作者:Mr.Pan 阅读数:529


小白开学Asp.Net Core《五》

                              —— 使用.Net Core MVC Filter

 

一、简介

  今天在项目(https://github.com/AjuPrince/Aju.Carefree)做登陆权限时,用到了Filter,现将Filer的使用做以下记录。

二、Filter 简介

  Filter俗称过滤器,它的作用是在Action方法执行前后做一些处理。它在Mvc Action 管道中运行,所以也可以叫做过滤器管道。

                         

三、Filter的执行顺序

  Authorization Filter ->  Resource Filter -> Action Filter -> Exception Filter -> Result Filter

  在.Net Core MVC 中新增了异步过滤器,如果提供了异步和同步过滤器,那么将执行异步过滤器,同步过滤器将不会执行。 

              

    (图片来自 John Wu 的博客

  • Authorization Filter

   Authorization Filter  是这几种Filter中优先级最高的,通常用于验证请求的合法性,俗称 授权过滤器。

  • Resource Filter

   Resource Filter 是第二个被执行的,Model Binding之前执行,通常用于对Model加工处理,俗称 资源过滤器

  • Action Filter 

   Action Filter 这个过滤器是最常用到的过滤器,在调用Action方法前后执行,在Model Binding之后执行,在使用上没什么特别注意的,俗称 方法过滤器

  • Exception Filter

   Exception Filter 常常用于应用程序执行异常是记录日志

  • Result Filter

  Result Filter 当Action 执行完成后,最终会执行的Filter,常常用于处理 Action 执行结果

 四、Filter类型在Filter管道中的交互方式

    

五、Filter 的注册

  Filter 的注册有两种方式,一种是全局注册,另一种的区域注册

  • 全局注册是在Startup.cs 中进行注册。注册后用于所有的Request

  • 区域注册是在Controller或者Action 上面加上[TypeFilter(type)]

六、项目案例(区域)

  • 定义ActionFilter:

复制代码

public class HandleLoginAsyncAttribute : IAsyncActionFilter
    {
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            context.HttpContext.Session.TryGetValue("Aju_Prince_OperatorProvider_20190708", out var result);
            if (result == null)
            {
                context.Result = new RedirectResult("/Login/Index");
                return;
            }
            await next.Invoke();
        }
    }

复制代码

  • 使用:

        

七、项目案例(全局)

  • Filter定义

  

  • 注册

     

参考:

  ASP.NET Core Filters

  ASP.NET Core 教學 - Filters

 

(本人坚信:学习是由浅到深的过程)

    不喜勿喷!谢谢!

  GitHub地址: https://github.com/AjuPrince/Aju.Carefree

非常感谢您的阅读和指点!!!


文章转自:https://www.cnblogs.com/haoxiaozhang/p/11152628.html


推荐文章

[推荐] .NET Core 学习资料精选:入门

[推荐] 数据库常见死锁原因及处理

[推荐] C# 设置Excel数据自适应行高、列宽的2种情况 (转)

[推荐] C++ vector 和set结合数字去重练习

[推荐] win7 .net core 部署 The library hostfxr.dll was found, but loading it from C:\<path_to_app>\hostfxr.dll failed

[推荐] JdbcTemplate多数据源使用

[推荐] 深入学习Redis(2):持久化

[推荐] asp.net core系列 67 Web压力测试工具WCAT

[推荐] .Net Core 2.0 获取客户端IP地址

[推荐] 第七天 让你的container实现跨主机访问

[推荐] nodejs app.use(express.static) 静态文件托管 (四)

[推荐] 8天玩转并行开发——第八天 用VS性能向导解剖你的程序

[推荐] C++ 稀疏表的练习

[推荐] C++ Lambda表达式练习

[推荐] Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

[推荐] asp.net core系列 33 EF查询数据 (2)

[推荐] 试试发布

[推荐] C++中 *p++ 到底是 *(p++) 还是 (*p)++ 1. 猜想

[推荐] JavaWeb-Log4j: WARN No appenders could be found for logger

[推荐] C++ 模板练习


评论列表



注册用户登录后才能发表评论,请登录注册,访问 博客首页