手机版

net core webapi通过中间件获取请求和响应内容的方法

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

本文主要根据中间件来实现对net core webapi中产生的请求和响应数据进行获取并存入日志文件中;

这里不详细介绍日志文件的使用。你可以自己接入NLog,log4net,无异常等

创建接口记录的中间件

使用微流.核心。伐木工;使用微软AspNetCore。建设者使用微软AspNetCore。超文本传送协议(Hyper Text Transport Protocol的缩写)使用微软AspNetCore。Http。内部的使用牛顿英尺.数据使用系统;使用系统。集合。通用;使用系统。诊断;使用系统IO;使用系统Linq .使用系统。文字;使用系统。线程化。任务;命名空间Ptibro .搭档。API。扩展{公共类requestresponseloggingidderware {私有readonly Requestdelegate _ next私有只读ILogger _ logger private sorted dictionary string,object _ data私人秒表_秒表;public request responselogingidle ware(request delegate next,ILogger logger){ _ next=next;_ logger=logger_秒表=新秒表();}公共异步任务调用(HttpContext上下文){ _秒表restart();_ data=新的排序字典字符串,object();请求=上下文.请求;_数据添加(' request.url ',请求.路径。ToString());_数据。添加(“request.headers”,request .标题。ToDictionary(x=x.Key,v=string .连接(';',v .值。tolist())));_数据添加(' request.method ',请求.方法);_数据。添加(' request.executeStartTime ',DateTimeOffset).现在。ToString(' yyyy-MM-DD hh :MM 3360s。fff’);//获取请求身体内容如果(请求。方法。ToLower().等于(' post '){//启用倒带功能,就可以让请求。身体可以再次读取请求启用倒带();流流=请求。身体;字节[]缓冲=新字节[请求。内容长度。值];小溪。读取(缓冲区,0,缓冲区。长度);_数据。添加(“request.body”,编码. UTF8。GetString(缓冲区));请求。正文。位置=0;} else if(请求。方法。ToLower().equals(' get '){ _ data .添加(' request.body ',request .查询字符串。价值);} //获取回应。身体内容var originalBodyStream=context .回应。身体;使用(var响应体=新内存流()){ context .响应。身体=响应身体;wait _next(上下文);_数据添加(' response.body ',等待GetResponse(上下文.回应);_数据。添加(' response.executeEndTime ',DateTimeOffset .现在。ToString(' yyyy-MM-DD hh :MM 3360s。fff’);等待回应复制到同步(原始body stream);} //响应完成记录时间和存入日志语境。响应。已完成(()={ _秒表stop();_数据。添加(' elaspedTime ',_秒表elapsedmirialsseconds ' ms ');var json=JsonConvert .SerializeObject(_ data);_记录器.调试(json,“api”,请求方法。toupper());返回任务。完成任务;});} ///摘要///获取响应内容////summary////param name=' response '/param////returns/returns public async taskstring GetResponse(Httpresponse response){ response .尸体。Seek(0,SeekOrigin .开始);var文本=等待新的StreamReader(响应。身体)。ReadToEndAsync();回应身体。Seek(0,SeekOrigin .开始);返回文本;} } ///摘要///扩展中间件////摘要公共静态类requestresponselogingiddlewarextensions { public static IApplicationBuilder user requestsresponseloging(此IApplicationBuilder应用程序){返回应用程序.usemiddlewarerequestresponselogingiddleware();} }}在startup.cs中安装使成形方法中使用中间件

public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env) { if (env。IsDevelopment()) { app。usedeveloper exception page();} app。UseErrorHandling();//尽可能将全局异常放在最上面.app。usereqestresponselogging();app。无用户例外(配置);app。UseMvc();}现在要求查看记录的效果:我的日志存在于exceptionless上,如下所示

解析json并记录以下数据:

摘要

以上是的方法。net core webapi通过边肖推出的中间件获取请求和响应内容。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!

版权声明:net core webapi通过中间件获取请求和响应内容的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。