首页 > 作文

.NET 6开发TodoList应用之实现ActionFilter

更新时间:2023-04-04 12:14:29 阅读: 评论:0

需求

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图