使用FuncT, TResult 委托实现API日志的记录

问题

平常我们开发web api的时候,一般是需要记录api的输入输出信息,方便后续排查问题;那么我们一般怎么做的,一般是我们在一个公共地方的写个公共方法控制输入输出。这时候Func<T, TResult> 委托就派上用场。

什么是Func

Func<T, TResult>封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。使用Func<T, TResult> 委托表示一种能以参数形式传递的方法,而不用显式声明自定义委托。 封装的方法必须与此委托定义的方法签名相对应。 也就是说,封装的方法必须具有一个通过值传递给它的参数,并且必须返回值。在使用 Func<T, TResult> 委托时,不必显式定义一个封装只有一个参数的方法的委托。

主要代码实现

1、定义委托。

    private ApiResult HandleWork(CreateBQoolSyncEventModel syncModel, Func<ApiResult> work){//先記錄到 Db Event_innerBQoolSyncEventLogService.Create(syncModel);var result = new ApiResult();try{_logger.Info($"Call Web Api Start, data:{syncModel.ToJsonString()}");result = work();if (!result.Success && !string.IsNullOrEmpty(result.Code) && string.IsNullOrEmpty(result.ErrorMessage)){result.ErrorMessage = ApiResultCode.ErrorMessages[result.Code];}}catch (Exception ex){_logger.Error(ex.ToString());result.Success = false;if (string.IsNullOrEmpty(result.ErrorMessage)){result.ErrorMessage = ex.Message;}else{result.ErrorMessage += "; " + ex.Message;}}finally{_logger.Info($"Call Web Api End , result:{result.ToJsonString()}");//更新 Db eventsyncModel.SetStatus(result.Success ? BQoolSyncEventStatus.Success : BQoolSyncEventStatus.Failure);_innerBQoolSyncEventLogService.ChangeStatus(syncModel.Id, syncModel.Status, result.ErrorMessage);}return result;}

2、把方法当做参数,传入委托。

  [HttpPost]public ApiResult ModuleFeatureSetting(ReviewsApiRequestModel model){string data = StringTools.AESDecrypt(model.Encrypt);var param = JObject.Parse(data).ToObject<ModuleFeatureSettingParam>();ApiResult result = HandleWork(new CreateBQoolSyncEventModel(param.Account, BQoolSyncEventType.ModuleFeatureSetting, param), () => _ReviewsSettingSyncService.ModuleFeatureSetting(param));return result;}

3、查看日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xencenter vgpu 看不见_有一种设计是“看不见,但感受得到”

设计源于生活&#xff0c;设计改变生活。在从业10余年之久的设计师刘洋来看&#xff0c;设计就是带着初心&#xff0c;不断去改变&#xff0c;去创造&#xff0c;去将更多设计的理念投射到时代的潮流中。刘洋认为设计不止是视觉感受&#xff0c;更重要的是融入人的情感&#xf…

python数据分析numpy_(转)Python数据分析之numpy学习

Python模块中的numpy&#xff0c;这是一个处理数组的强大模块&#xff0c;而该模块也是其他数据分析模块(如pandas和scipy)的核心。接下面将从这5个方面来介绍numpy模块的内容&#xff1a;1)数组的创建2)有关数组的属性和函数3)数组元素的获取--普通索引、切片、布尔索引和花式…

数学告诉你家庭关系的奥秘

一直跟踪家庭关系可能非常困难。如果你父亲表弟的女儿刚刚生了一个小男孩&#xff0c;你们两个人怎样被相互介绍&#xff1f;谁是你的"曾曾姑母"&#xff1f;怎样发现你的"移去两次的第一代表亲"&#xff1f;幸运的是&#xff0c;一点儿数学逻辑可以帮助澄…

sql server2005 分页特性

在sql server 2005的新功能中&#xff0c;比较西黄分页功能&#xff0c;通过查询函数row_number over(order by field)实现是提取分页数据当页的记录&#xff0c;此功能原理上和临时表差不多&#xff0c;不过通过插叙语句操作就快捷多了&#xff0c;做了个demo&#xff0c;分页…

c#爬虫-1688官网自动以图搜图

背景在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下网址 &#xff1a;https://www.1688.com/这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。实现思路1、找到图片上传接口post请求&#xff0c;form表单中有s…

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…

让人眼花缭乱的视错觉,太酷炫了!

盯~ 原理&#xff1a;这只死盯着人看的小短手并不是一个普通的纸模&#xff0c;它的眼睛鼻子和嘴也都不在正常的位置上&#xff0c;它的脸其实是凹下去的。 错觉的关键在于我们的大脑对凹面和凸面的加工方式&#xff0c;以及大脑对从图形中挑出一张脸的执着和能力。大脑想要…

一个人的夜晚

一个人的夜晚——代腾飞 2008年9月10日 于成都在这个秋深的夜晚一个人矗立窗前仰望天边与明月共婵娟一阵秋风吹来&#xff0c;心觉几分寒却找不到什么来抵挡于是去采几缕相思来作伴想让这颗孤寂冰冷的心变得一点温暖 只是刚一触动这一琴弦那心潮的死水就开始了犯难淹没了我整…

php 如何生成exe文件怎么打开,如何把PHP转成EXE文件

原问&#xff1a;如何把PHP转成EXE文件。结果当然是没有这样的软件&#xff0c;但是有两ASP的东东&#xff0c;可以把网站做成EXE文件发布。我没时间试&#xff0c;大家可以看看&#xff0c;有啥结果可以贴过来&#xff0c;我们研究研究。呵呵。地址&#xff1a;http://www.oct…

swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单

什么是SWOT分析图&#xff1f;大到企业小到个人都会使用到SWOT来对自身所具备的能力进行分析&#xff0c;这也印证了SWOT分析图的重要性&#xff0c;下面我们一起来深度了解SWOT分析吧&#xff01;&#xff01;一&#xff1a;什么是SWOT分析图所谓SWOT分析图是基于内外部竞争环…

不是python文件处理seek()方法的参数是_python文件操作seek()偏移量,读取指正到指定位置操作...

python 文件操作seek() 和 telll() 自我解释file.seek()方法格式&#xff1a; seek(offset,whence0) 移动文件读取指针到制定位置offset:开始的偏移量&#xff0c;也就是代表需要移动偏移的字节数。whence&#xff1a; 给offset参数一个定义&#xff0c;表示要从哪个位置开始偏…

有哪些命令行的软件堪称神器?

ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目&#xff0c;可以替代git命令。 mycli mysql客户端&#xff0c;支持语法高亮和命令补全&#xff0c;效果类似ipython&#xff0c;可以替代mysql命令。 jq json文件处理以及格式化显示&#xff0c;支持高…

SQL--合并多条记录为一条记录

--作用:源表中,如果A列的记录相同的,则把B列的记录合并,再写到目的表中,如果不相同,则原样插入到目的表中---两个原始表之一,源if exists (select * from dbo.sysobjects where id object_id(N[dbo].[源]) and OBJECTPROPERTY(id, NIsUserTable) 1)drop table [dbo].[源]GOCR…

java类型转换造成的字节丢失,java 编码转换(已解决,转换字节丢失,无法实现)

Header里面的Content-Disposition只支持ASCII&#xff0c;所以我们传输的文件名必须是ASCII&#xff0c;当文件名为中文时&#xff0c;必须要将该中文转换成ASCII。如果服务端能处理&#xff0c;最好直接将filename通过URLEncode编码。根据你提供的代码&#xff0c;你服务端返回…

代码 | 一天一点代码坏味道(1)

【代码精进】| 总结/Edison Zhou作为一个后端工程师&#xff0c;想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习总结&#xff0c;今天第一天发车&#xff0c;先来看看在命名上的一些常犯的坏味道。0为何要品代码坏味道Martin Flower在《重构》一书…

香肠派对电脑版_香肠派对先行服s7赛季下载-香肠派对先行服s7赛季最新版下载...

详情香肠派对先行服s7赛季是玩家非常喜爱的一款游戏&#xff0c;香肠派对先行服已经更新到最新的s7赛季&#xff0c;在这里可以超前体验版本的内容&#xff0c;始终先人一步&#xff01;喜欢就来下载香肠派对先行服s7赛季最新版本开始战斗吧&#xff01;香肠派对先行服s7赛季游…

python base64编码_JS和Python实现AES算法

1. AES原理AES算法是典型的对称加密算法&#xff0c;AES原理可以学习这两篇文档&#xff1a;漫画&#xff1a;什么是AES算法&#xff1a;https://www.toutiao.com/i6783550080784794124/AES加密算法的详细介绍与实现&#xff1a;https://blog.csdn.net/qq_28205153/article/det…

Zune 3.0与XNA GS 3.0 Beta

2008年9月16日&#xff0c;微软发布了新的Zune设备&#xff0c;新增了16G和120G的版本&#xff0c;颜色也出现了新颜色&#xff0c;蓝色的比较好看。 与此同时&#xff0c;Zune Software也升级到3.0&#xff0c;有Zune的朋友可以从www.zune.net上下载。Zune 3.0不仅为你的Zune设…