Ein Beispiel dafür, wie Sie dies tun können:
Einige Notizen:
LoggingHandler
fängt die Anforderung ab, bevor sie verarbeitet wird, HttpClientHandler
und schreibt schließlich in die Leitung.
PostAsJsonAsync
Die Erweiterung erstellt intern ein ObjectContent
und wenn sie ReadAsStringAsync()
in aufgerufen wird LoggingHandler
, bewirkt sie, dass der Formatierer im Inneren ObjectContent
das Objekt serialisiert. Aus diesem Grund wird der Inhalt in json angezeigt.
Protokollierungshandler:
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;
}
}
Verketten Sie den obigen LoggingHandler mit HttpClient :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Ausgabe:
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!"
new HttpClientHandler()
? Es ist nicht in den offiziellen Dokumenten enthalten: docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/…ProcessRequest
undProcessResponse
-Methode für Sie vor und nach demSendAsync
Aufruf aufruft .Siehe http://mikehadlow.blogspot.com/2012/07/tracing-systemnet-to-debug-http-clients.html
Fügen Sie Ihrer Assembly-Konfigurationsdatei Folgendes hinzu, um einen System.Net-Listener für die Ausgabe sowohl an die Konsole als auch an eine Protokolldatei zu konfigurieren:
quelle
<system.diagnostics>
inapp.config
unter kopiert,<configuration>
aber imbin
Ordner gibt es keine Protokolldatei und die Konsolenausgabe zeigt auch nichts an. Was fehlt mir?initializeData
Attribut angegebene Dateiname wird im aktuellen Arbeitsverzeichnis der ausführbaren Datei erstellt, die Sie ausführen. Daher möchten Sie möglicherweise überprüfen, welcher Pfad sich in Ihrer Umgebung befindet.Netzwerk-Tracing auch für nächste Objekte verfügbar (siehe Artikel auf msdn )
Fügen Sie die nächsten Codezeilen in die Konfigurationsdatei ein
quelle
Die einfachste Lösung wäre, Wireshark zu verwenden und den HTTP-TCP-Fluss zu verfolgen.
quelle