四:net core(.NET 6)使用Filter过滤器拦截webapi方法

简介: Filter的基本用法 :代码在最下方使用filter过滤器,来实现拦截接口信息。咱们先新建一个项目,在原有的webapi上面,选择添加项目,添加一个类库项目


Filter的基本用法

 

代码在最下方

使用filter过滤器,来实现拦截接口信息。咱们先新建一个项目,在原有的webapi上面,选择添加项目,添加一个类库项目:


1995789-20210529170405139-1773423480.png

我起个名字,就叫 Wsk.Core.Filter:

1995789-20210529170418119-1744305165.png

 

然后,我们把自带的控制器删除掉,咱们手撸一个。以下是要删掉的部分:


1995789-20210529170438339-1079129980.png


然后新建一个api控制器,例如叫 WSKController


1995789-20210529170500404-1288450588.png


1995789-20210529170513686-1051313054.png

 

然后,新建一个webapi方法,例如HelloWorld:


1995789-20210529170531484-1973962783.png

 

然后,我们来做个打印输出到日志,切换回我们的Wsk.Core.Filter上面,删除默认的Class1,然后新增一个类,就叫HelloFilter,它需要继承于ActionFilterAttribute   不存在需要先手动引用有关的包:Microsoft.AspNetCore.Mvc

 

1995789-20210529170617571-1909002444.png

 

接下来,好戏开始了,直接上代码:

1995789-20210529170706169-8876097.png


重写4个方法,具体作用,如图上注释。我们现在只做简单验证,验证进接口之前、以及执行接口完毕,都会发生什么。我们给他们打印点东西。先在webapi方法里面写个打印的内容:


1995789-20210529170723943-680364512.png

然后,在OnActionExecuting方法里面写点接收前的打印内容:


1995789-20210529170737205-1618574402.png


在 OnResultExecuted方法写点webapi方法执行完毕返回时候的打印内容:

1995789-20210529170752797-1967381374.png

 

然后,在接口项目里面,引用该类库项目:


1995789-20210529170846289-1159459353.png

在属性上方添加 [HelloFilter]实现切面拦截:


 1995789-20210529170858193-109979861.png


接下来准备duang一下见证奇迹,运行程序,走一个:


1995789-20210529170914520-704038299.png


如图,奇迹见证完毕。拦截器内部代码如下:



publicclass HelloFilter: ActionFilterAttribute

   {


       ///<summary>

       /// Action方法调用之前执行

       ///</summary>

       ///<param name="context"></param>

       publicoverridevoid OnActionExecuting(ActionExecutingContext context) {

           var descriptor = context.ActionDescriptor as ControllerActionDescriptor;


           string param = string.Empty;

           string globalParam = string.Empty;


           foreach (var arg in context.ActionArguments)

           {

               string value = Newtonsoft.Json.JsonConvert.SerializeObject(arg.Value);

               param += $"{arg.Key} : {value} \r\n";

               globalParam += value;

           }

           Console.WriteLine($"webapi方法名称:【{descriptor.ActionName}】接收到参数为:{param}");

       }

       ///<summary>

       /// Action 方法调用后,Result 方法调用前执行

       ///</summary>

       ///<param name="context"></param>

       publicoverridevoid OnActionExecuted(ActionExecutedContext context) { }

       ///<summary>

       /// Result 方法调用前执行

       ///</summary>

       ///<param name="context"></param>

       publicoverridevoid OnResultExecuting(ResultExecutingContext context) {  }

       ///<summary>

       /// Result 方法调用后执行

       ///</summary>

       ///<param name="context"></param>

       publicoverridevoid OnResultExecuted(ResultExecutedContext context)  {

           var descriptor = context.ActionDescriptor as ControllerActionDescriptor;

         

           string result = string.Empty;

           if (context.Result is ObjectResult)

           {

               result = Newtonsoft.Json.JsonConvert.SerializeObject(((ObjectResult)context.Result).Value);

           }


           Console.WriteLine($"webapi方法名称【{descriptor.ActionName}】执行的返回值 :  {result}");

       }

   }


目录
相关文章
|
25天前
|
API 网络安全 数据安全/隐私保护
.NET邮箱API发送邮件的方法有哪些
本文介绍了.NET开发中使用邮箱API发送邮件的方法,包括SmtpClient类发送邮件、MailMessage类创建邮件消息、设置SmtpClient属性、同步/异步发送、错误处理、发送HTML格式邮件、带附件邮件以及多人邮件。AokSend提供高触达发信服务,适用于大规模验证码发送场景。了解这些技巧有助于开发者实现高效、可靠的邮件功能。
|
25天前
|
消息中间件 前端开发 小程序
一个基于.NET Core构建的简单、跨平台、模块化的商城系统
今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。
|
25天前
|
算法 C# 数据库
【干货】一份10万字免费的C#/.NET/.NET Core面试宝典
C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成。该份基础面试宝典完全免费,发布两年来收获了广大.NET小伙伴的好评,我会持续更新和改进,欢迎关注我的公众号【追逐时光者】第一时间获取最新更新的面试题内容。
|
25天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
9天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
18 0
|
23天前
|
Linux API iOS开发
.net core 优势
.NET Core 的优势:跨平台兼容(Windows, macOS, Linux)及容器支持,高性能,支持并行版本控制,丰富的新增API,以及开源。
25 4
|
2月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
2月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
72 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
45 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0