繁体   English   中英

记录由第三方NuGet软件包执行的HTTP请求和响应

[英]Log HTTP request and response executed by a 3rd party NuGet package

我使用API​​客户端NuGet程序包,该程序包发送HTTP请求并接收来自第三方API的响应。 我如何捕获并记录该NuGet包执行的HTTP请求和响应,以将它们存储在日志数据库中?

例:

var client = new ThirdPartyPackage.Client();
var todos = client.fetchTodos(); // how to log the HTTP request/response executed by the third party package?

具体示例: https : //github.com/exactonline/exactonline-api-dotnet-client/blob/master/test/ExactOnline.Client.Sdk.IntegrationTests/ExactOnlineQueryTests.cs#L21

IIS已经为您完成了日志记录。 您可以在以下文件夹中找到日志:%SystemDrive%\\ inetpub \\ logs \\ LogFiles

您可以根据需要自定义日志架构。 您不需要为此的Nuget程序包。 或者,如果需要,您可以使用Nlog

您正在使用的库似乎在WebRequest使用WebRequest来执行其HTTP请求。 因此,您应该能够将WebRequest.DefaultWebProxy属性设置为拦截请求。

https://msdn.microsoft.com/zh-cn/library/system.net.webrequest.defaultwebproxy(v=vs.110).aspx

(源代码参考: https : //github.com/exactonline/exactonline-api-dotnet-client/blob/master/src/ExactOnline.Client.Sdk/Helpers/ApiConnector.cs#L167

请注意,但是,这可能需要大量工作,具体取决于您希望捕获有关请求的确切信息,因此,如果您是我,我将认真考虑派生该库并对其代码进行更改以提供一些日志记录挂钩。

DefaultWebProxy方法的好处是,一旦启动并工作,就不需要太多维护,不利的是,它可能需要大量的工作,并增加了另一个故障点。 派生该库的好处是,最初应该更快地实现它,但是可能需要进行更多维护,因为您可能需要将对原始SDK的任何更改手动合并到fork中。 考虑到您使用的软件包在2年内几乎没有变化,但是这似乎是可以接受的风险。

此外,如果您使用派生路线,则始终可以向原始存储库维护者发送拉取请求,这希望意味着您的代码最终将最终保存在Nuget包中,然后您可以返回到Nuget而不是派生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM