0

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

4

2 回答 2

-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 路线,那么您始终可以向原始存储库维护者发送拉取请求,这可能意味着您的代码最终会出现在 Nuget 包中,然后您可以恢复到 Nuget 而不是您的 fork。

于 2016-11-21T10:16:52.360 回答
-1

IIS already does the logging for you. You can find the logs in the folder:%SystemDrive%\inetpub\logs\LogFiles

You can customize the log schema as you wish. you dont need a Nuget package for this. Or if you want, you can use Nlog

于 2016-11-21T08:19:17.913 回答