आप यह कैसे कर सकते हैं इसका एक उदाहरण:
कुछ नोट:
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!"