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

时间:2016-11-21 08:16:14

标签: c# .net exact-online

我使用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

2 个答案:

答案 0 :(得分:-1)

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

您可以根据需要自定义日志架构。你不需要一个Nuget包。或者如果您愿意,可以使用Nlog

答案 1 :(得分:-1)

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

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

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

请注意,这可能是很多工作,具体取决于您希望捕获的有关请求的确切信息,因此,如果我是您,我会认真考虑分叉库并更改其代码以提供一些用于记录的钩子。

DefaultWebProxy方法的好处是,一旦它完成并且工作它不需要太多维护,否定的是它可能在前面进行大量的工作并且正在添加另一个失败点。分支库的好处是它最初应该更快实现,但可能需要更多持续维护,因为您可能需要将对原始SDK的任何更改手动合并到fork中。鉴于您使用的套餐在2年内几乎没有变化,但这似乎是可接受的风险。

此外,如果你进入fork路线,那么你总是可以向原始存储库维护者发送一个pull请求,这有望意味着你的代码最终会在Nuget包中结束,然后你可以恢复到Nuget而不是你的fork