आप यह कैसे कर सकते हैं इसका एक उदाहरण:
कुछ नोट:
LoggingHandlerअनुरोध को स्वीकार करता है इससे पहले कि वह इसे संभालता है HttpClientHandlerजो अंत में तार को लिखता है।
PostAsJsonAsyncविस्तार आंतरिक रूप से बनाता है ObjectContentऔर जब ReadAsStringAsync()इसे बुलाया जाता है LoggingHandler, तो यह ObjectContentऑब्जेक्ट को क्रमबद्ध करने के लिए फॉर्मेटर के अंदर का कारण बनता है और यही कारण है कि आप सामग्री को जस में देख रहे हैं।
लॉगिंग हैंडलर:
public class LoggingHandler : DelegatingHandler
{
public LoggingHandler(HttpMessageHandler innerHandler)
: base(innerHandler)
{
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Console.WriteLine("Request:");
Console.WriteLine(request.ToString());
if (request.Content != null)
{
Console.WriteLine(await request.Content.ReadAsStringAsync());
}
Console.WriteLine();
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
Console.WriteLine("Response:");
Console.WriteLine(response.ToString());
if (response.Content != null)
{
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
Console.WriteLine();
return response;
}
}
उपरोक्त लॉगिंगहैंडलर को HttpClient के साथ चैन करें :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
आउटपुट:
Request:
Method: POST, RequestUri: 'http://kirandesktop:9095/api/values', Version: 1.1, Content: System.Net.Http.ObjectContent`1[
[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], Headers:
{
Content-Type: application/json; charset=utf-8
}
"Hello, World!"
Response:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Date: Fri, 20 Sep 2013 20:21:26 GMT
Server: Microsoft-HTTPAPI/2.0
Content-Length: 15
Content-Type: application/json; charset=utf-8
}
"Hello, World!"