Un ejemplo de cómo podrías hacer esto:
Algunas notas:
LoggingHandler
intercepta la solicitud antes de que la maneje y HttpClientHandler
finalmente escribe en el cable.
PostAsJsonAsync
La extensión crea internamente un ObjectContent
y cuando ReadAsStringAsync()
se llama en el LoggingHandler
, hace que el formateador interno ObjectContent
serialice el objeto y esa es la razón por la que está viendo el contenido en json.
Controlador de registro:
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;
}
}
Encadena el LoggingHandler anterior con HttpClient :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Salida:
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()
? No está presente en los documentos oficiales: docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/…ProcessRequest
yProcessResponse
método para usted antes y después de laSendAsync
llamada.Ver http://mikehadlow.blogspot.com/2012/07/tracing-systemnet-to-debug-http-clients.html
Para configurar un oyente System.Net para que se genere tanto en la consola como en un archivo de registro, agregue lo siguiente a su archivo de configuración de ensamblaje:
fuente
<system.diagnostics>
enapp.config
debajo,<configuration>
pero en labin
carpeta no hay un archivo de registro y la salida de la consola tampoco muestra nada, ¿qué me falta?initializeData
atributo se creará en el directorio de trabajo actual del ejecutable que está ejecutando, por lo que es posible que desee verificar qué ruta se encuentra en su entorno.El rastreo de red también está disponible para los siguientes objetos (consulte el artículo sobre msdn )
Coloque las siguientes líneas de código en el archivo de configuración
fuente
La solución más sencilla sería utilizar Wireshark y rastrear el flujo HTTP tcp.
fuente