2016-11-21 49 views
0

我使用API​​客户端NuGet包发送HTTP请求并接收来自第三方API的响应。如何捕获和记录由NuGet包执行的HTTP请求和响应,以便将它们存储在日志数据库中?由第三方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

+0

请提供使用此包发送请求的示例代码 –

+0

我猜测完全取决于您的API /包。正如易卜拉欣已经提到的,在这种情况下[mcve]将是一个好主意。 –

+0

它如何取决于API /包?我无法更改NuGet包中的代码,所以我问是否有可能围绕它捕获HTTP流量的代码。 – Korneel

回答

-1

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

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

+1

API是第三方,有可能海报无法访问服务器或其日志文件。 –

-1

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

https://msdn.microsoft.com/en-us/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的任何更改手动合并到叉中。鉴于你使用的软件包在2年内几乎没有变化,但这似乎是一个可接受的风险。

另外,如果你去了fork路径,那么你总是可以发送原始的repository维护者一个pull请求,希望这意味着你的代码最终会在Nuget包中结束,然后你可以恢复到Nuget而不是你的叉子。

+0

向下投票关心评论? –