四: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}");

       }

   }


目录
相关文章
|
4月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1062 2
|
4月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
457 6
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
398 5
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
341 1
|
移动开发 中间件 .NET
ASP.NET Core 2 学习笔记(三)中间件
原文:ASP.NET Core 2 学习笔记(三)中间件 之前ASP.NET中使用的HTTP Modules及HTTP Handlers,在ASP.NET Core中已不复存在,取而代之的是Middleware。
1111 62
|
开发框架 前端开发 .NET
ASP.NET Core 核心特性学习笔记「下」
ASP.NET Core 核心特性学习笔记「下」
|
开发框架 前端开发 中间件
ASP.NET Core 核心特性学习笔记「上」
ASP.NET Core 核心特性学习笔记「上」
|
SQL 机器学习/深度学习 Cloud Native
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
- 状态 - 自动变更检测 - 不查询删除和更新 - 并发
352 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
|
SQL Cloud Native 架构师
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
- 关联数据加载 - 客户端与服务端运算 - 跟踪与不跟踪 - 复杂查询运算 - 原生 SQL 查询 - 全局查询筛选器
384 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
|
Cloud Native 架构师

热门文章

最新文章