.Net Core-AOP(Attribute和MiddleWare)

AOP在实际项目中运用的比较多,在日志记录,数据验证,返回值处理等都会涉及,本篇简单概括和记录下AOP的使用和扩展。 1.过滤器和中间件的执行顺序

从管道模型图看出,请求开始,首先经过中间件,然后经过过滤器,最终从中间件返回结果。 创建一个空WebApi项目,创建过滤器CustomActionFilter.cs和中间件MiddleWareA.cs

1 public class CustomActionFilter : ActionFilterAttribute 2 { 3     public override void OnActionExecuting(ActionExecutingContext context) 4     { 5         Console.WriteLine("操作过滤器:执行前"); 6     } 7     public override void OnActionExecuted(ActionExecutedContext context) 8     { 9         Console.WriteLine("操作过滤器:执行后");10     } 11 }
1 public class MiddleWareA 2 { 3     private readonly RequestDelegate _next; 4  5     public MiddleWareA(RequestDelegate next) 6     { 7         _next = next; 8     } 9 10     public async Task Invoke(HttpContext context)11     {12         Console.WriteLine("MiddleWareA 开始");13         await _next.Invoke(context);14         Console.WriteLine("MiddleWareA 结束");15     }16 }

在Startup.cs中注入中间件

app.UseMiddleware<MiddleWareA>();

结果如下图所示,和管道模型图的流程基本一直。

在使用多个中间件的时候要注意中间件的执行顺序,先进后出

2.过滤器和中间件的使用场景

.Net Core中常用的5种过滤器,都继承了抽象类Attribute,如上图所示补充模型校验(ValidateAttribute)的使用,详细介绍参考《.Net Core 数据校验Attribute和FluentValidate》创建NullValidation.cs和模型 ModelTest.cs

1 public class NullValidation : ValidationAttribute 2 { 3     private bool isValidSuccess = true; 4     5  6     public override bool IsValid(object value) 7     { 8         Console.WriteLine("进入NullValidation"); 9         if (value==null)10         {11             isValidSuccess = false; 12          13 14         }15         return isValidSuccess;16 17     }18 }
1 public class ModelTest2 {3     [NullValidation]4     public string Name { get; set; }5 }

控制器中新建方法PostList

1 [CustomActionFilter] 2 [HttpPost] 3 public IEnumerable<WeatherForecast> PostList(ModelTest modelTest) 4 { 5     Console.WriteLine("进入PostList"); 6     var rng = new Random(); 7     return Enumerable.Range(1, 5).Select(index => new WeatherForecast 8     { 9         Date = DateTime.Now.AddDays(index),10         TemperatureC = rng.Next(-20, 55),11         Summary = Summaries[rng.Next(Summaries.Length)]12     })13     .ToArray();14 }

运行结果如下图所示:中间件->模型校验->操作过滤器->中间件

由此可见,模型校验在接收到参数请求后就会被执行,优先级高于操作过滤器。ValidateAttribute也是继承了Attribute抽象类。如下图所示:

使用场景总结:Filter使用场景:处理业务相关的内容,如输出结果的格式化,ViewModel数据验证MiddleWare使用场景:和业务耦合不大的情况下,如身份验证,Session存储,日志记录等 以上仅用于学习和总结!附源码地址:链接:https://pan.baidu.com/s/1AZRBGw75c3k5ypxrnXzP2g   参考地址:https://www.cnblogs.com/ywkcode/p/13737092.htmlhttps://www.cnblogs.com/viter/p/10107886.html

来源:https://www.icode9.com/content-4-860951.html

(0)

相关推荐

  • umi-request 中间件和拦截器解析

    前言 使用react框架中经常使用到umi来搭建管理我们的项目,其中涉及到请求的模块,umi自身提供了 umi-request 库 方便了我们做网络请求, umi-request的官方文档可见其git ...

  • 让 .NET 轻松构建中间件模式代码(二)

    让 .NET 轻松构建中间件模式代码(二)--- 支持管道的中断和分支 Intro 上次实现了一个基本的构建中间件模式的中间件构建器,现在来丰富一下功能,让它支持中断和分支,分别对应 asp.net ...

  • 结合 AOP 轻松处理事件发布处理日志

    结合 AOP 轻松处理事件发布处理日志 Intro 前段时间,实现了 EventBus 以及 EventQueue 基于 Event 的事件处理,但是没有做日志(EventLog)相关的部分,原本想增 ...

  • ASP.NET Core 中间件详解及项目实战

    WEB前端开发社区 昨天 前言 本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的Hello World,如果你觉得本篇文章对你有用的话,不妨点个[ ...

  • 一个学习 Koa 源码的例子

    作者: MarkLin 学习目标: 原生 node 封装 中间件 路由 Koa 原理 一个 nodejs 的入门级 http 服务代码如下, // index.js const http = requ ...

  • ASP.Net Core 5.0 MVC中AOP思想的体现(五种过滤器)并结合项目案例说明过滤器的用法

    执行顺序 使用方法,首先实现各自的接口,override里面的方法, 然后在startup 类的 ConfigureServices 方法,注册它们. services.AddTransient(ty ...

  • 动手实现一个适用于.NET Core 的诊断工具

    今天 以下文章来源于全球技术精选 ,作者SpringLeee 全球技术精选dotnet 国内外新鲜技术资讯,优秀博客,开源项目分享平台 前言 大家可能对诊断工具并不陌生,从大名鼎鼎的 dotTrace ...

  • 深入探究ASP.NET Core读取Request.Body的正确方式

    dotNET跨平台 今天 以下文章来源于yi念之间 ,作者yi念之间 前言 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POS ...

  • 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

    TaylorShi dotNET跨平台 昨天 Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间 ...

  • ML.NET 示例:对象检测-ASP.NET Core Web和WPF桌面示例

    dotNET跨平台 今天以下文章来源于My IO ,作者My IO My IO记录工作和生活,将输入变成输出ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法v1.5.0动态A ...

  • .NET Core with 微服务 - 什么是微服务

    今天 以下文章来源于馒哥不光会玩当耐特 ,作者MJZHOU 馒哥不光会玩当耐特这个号主要分享.NET相关知识,但也不光是.NET,也会涉及其他任何技术. 微服务是这几年最流行的架构,说起架构不提微服务 ...

  • Hosting in .NET Core

    Johnny Qian dotNET跨平台 今天在.NET Core中,Host负责应用程序的启动和生命周期管理.除此之外,在Host中还可以设置日志(Logging).配置(Configuratio ...

  • 如何在 40 秒内创建一个.Net Core Web API?

    WEB前端开发社区 今天 为什么我们需要自己写代码?为什么计算机无法自动为我们生成这些代码呢?很显然,我们应该可以利用这些共同点,从一个给定的数据库自动化构建系统--这就是"我"创 ...

  • 温故知新,.Net Core遇见Blazor(FluentUI),属于未来的SPA框架

    TaylorShi dotNET跨平台 今天什么是BlazorBlazor是一个使用.NET生成交互式客户端WebUI的框架:使用C#代替JavaScript来创建信息丰富的交互式UI.共享使用.NE ...