Um exemplo de como você pode fazer isso:
Algumas notas:
LoggingHandler
intercepta a solicitação antes de tratá-la, o HttpClientHandler
que finalmente grava na transmissão.
PostAsJsonAsync
A extensão cria internamente um ObjectContent
e quando ReadAsStringAsync()
é chamada em LoggingHandler
, faz com que o formatador interno ObjectContent
serialize o objeto e é por essa razão que você está vendo o conteúdo em json.
Manipulador 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;
}
}
Encadeie o LoggingHandler acima com HttpClient :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Resultado:
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()
? Não está presente nos documentos oficiais: docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/…ProcessRequest
eProcessResponse
para você antes e depois daSendAsync
chamada.Consulte http://mikehadlow.blogspot.com/2012/07/tracing-systemnet-to-debug-http-clients.html
Para configurar um ouvinte System.Net para saída para o console e um arquivo de log, adicione o seguinte ao seu arquivo de configuração de montagem:
fonte
<system.diagnostics>
paraapp.config
em,<configuration>
mas nabin
pasta não há arquivo de log e a saída do console também não exibe nada, o que estou perdendo?initializeData
atributo será criado no diretório de trabalho atual do executável que você está executando, portanto, convém verificar qual caminho está em seu ambiente.Rastreamento de rede também disponível para próximos objetos (consulte o artigo no msdn )
Coloque as próximas linhas de código no arquivo de configuração
fonte
A solução mais fácil seria usar o Wireshark e rastrear o fluxo HTTP tcp.
fonte