Записать HTTP-запрос и ответ, выполненные сторонним пакетом NuGet
Я использую клиентский пакет API NuGet, который отправляет HTTP-запросы и получает ответы от стороннего API. Как я могу записывать и регистрировать HTTP-запросы и ответы, выполняемые этим пакетом NuGet, чтобы сохранять их в базе данных журналов?
Пример:
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 ответа
IIS уже делает запись для вас. Вы можете найти журналы в папке:%SystemDrive%\inetpub\logs\LogFiles
Вы можете настроить схему журнала, как вы хотите. Вам не нужен пакет Nuget для этого. Или, если вы хотите, вы можете использовать Nlog
Библиотека, которую вы используете, похоже, использует 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 вручную в ваш форк. Учитывая, что пакет, который вы используете, почти не изменился за 2 года, однако это кажется приемлемым риском.
Кроме того, если вы идете по маршруту ветвления, то вы всегда можете отправить исходному серверу хранилища запрос на извлечение, что, возможно, будет означать, что ваш код в конечном итоге окажется в пакете Nuget, и вы сможете затем вернуться к Nuget вместо своего форка.