filter在.net web api项目开发中也是很重要的一个概念,它运行在执行mvc响应的pipeline中国产奶粉什么牌子好执行,允许我们将一些可以在多个action之间重用的逻辑抽取出来集中管理。虽然我们在上一篇使用.net 6开发todolist应用之实现接口请求验证中演示了如何通过使用mediatr提供的ipipelinebehavior接口在cqrs的handle方法执行前后插入可重用代码,而本文所演示的filters作用在controller的action执行或action返回结果前后。
可以创建自定义filters,用于处理应用程序中的横切片关注点。 横切片关注点的包括错误处理仁化丹霞山、缓存、配置、授权和日志记录。 filters可以避免重复代码。
filter的类型分为以下几种:
authorization filters
:最先运行,用于确定是否已针对请求为用户授权。 如果请求未获授权,authorization filters可以让管道短路。
resource filters
:授权后运行。onresourceexecuting在filter pipeline的其余阶段之前运行代码。onresourceexecuted在管道的其余阶段完成之后运行代码。可以用这个类型的filter进行缓存和性能统计。
action filters
:在调用操作方法之前和之后立即运行代码。它可以更改传递到操作中的参数,也可以更改从操作返回的结果,当然如果什么都不更改仅作记录也是可以的。
exception filters
:在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。
result filters
:在执行操作结果返回之前和之后运行代码。 仅当操作方法成功执行时,它们才会被运行。
这五种filters在filter pipeline中直观的展现是这样的:
而整个filter pipeline在完整的middleware pipeline中的阶段是这样的:
在本文中,我们将演示action filters是如何在controller的action执行前后记录请求和响应日志的。
使用action filters进行接口日志记录。
创建一个自定义的action filter,用于实现controller的接口日志逻辑。
在api新建文件夹filters并创建类logfilterattribute:
logfilterattribute.cs
using system.text.json;using microsoft.aspnetcore.mvc;using microsoft.aspnetcore.mvc.filters;namespace todolist.api.filters;public class logfilterattribute : iactionfilter{ private readonly ilogger<logfilterattribute> _logger; public logfilterattribute(ilogger<logfilterattribute> logger) => _logger = logger; public void onactionexecuting(actionexecutingcontext context) { var action = context.routedata.values["action"]; var controller = context.routedata.values["controller"]; // 获取名称包含command的参数值 var param = context.actionarguments.singleordefault(x => x.value.tostring().contains("command")).value; _logger.loginformation($"controller:{controller}, action: {action}, incoming request: {jsonrializer.rialize(param)}"); } public void onactionexecut摇摆的近义词ed(actionexecutedcontext context) { var action = context.routedata.values["action"]; var controller = context.routedata.values["controller"]; // 需要先将result转换为objectresult类型才能拿到value值 var result = (objectresult)context.result!; _logger.loginformation($"controller:{controller}, action: {action}, executing respon: {jsonrializer.rialize(result.value)}"); }}
依赖注入:
program.cs
builder.rvices.addscoped<logfilterattribute>();
在需要应用该filter的controller action上添加属性:
todolistcontroller.cs
[httppost][rvicefilter(typeof(logfilterattribute))]public async task<apirespon<domain.entities.todolist>> create([frombody] createtodolistcommand command){ return apirespon<domain.entities.todolist>.success(await英易派 _mediator.nd(command));}
启动api项目,执行创建todolist的请求:
请求
响应
来自于onactionexecuting的请求数据日志:
注意在我们上一篇文章中的handling createtodolistcommand之前输出的内容。
以及来自于onactionexecuted输出的返回数据日志:
在本文中我们通过一个很简单的例子,演示了action filter的基本用法。至此我们关于请求中间件管道的讨论先告一日韩歌手个段落,后面说到认证鉴权的时候我们还会回来讨论这个主题。
到此这篇关于.net 6开发todolist应用之实现actionfilter的文章就介绍到这了,更多相关.net 6实现actionfilter内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 12:14:27,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/97e3c31495aeb17546b94c8ea0b79027.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:.NET 6开发TodoList应用之实现ActionFilter.doc
本文 PDF 下载地址:.NET 6开发TodoList应用之实现ActionFilter.pdf
留言与评论(共有 0 条评论) |