我有一个执行POST的方法,如下所示
var response = await client.PostAsJsonAsync(url, entity);
if (response.IsSuccessStatusCode)
{
// read the response as strongly typed object
return await response.Content.ReadAsAsync<T>();
}
我的问题是如何获得从实体对象发布的实际JSON。我想记录发布的JSON,所以如果不需要我自己进行json序列化就可以了。
4条答案
按热度按时间lg40wkob1#
下面是一个如何实现此操作的示例:
一些注意事项:
LoggingHandler
在将请求处理到HttpClientHandler
之前拦截请求,HttpClientHandler
最终写入到线。PostAsJsonAsync
扩展在内部创建了一个ObjectContent
,当在LoggingHandler
中调用ReadAsStringAsync()
时,它会导致ObjectContent
中的格式化程序序列化对象,这就是您在json中看到内容的原因。hs1ihplo2#
注意:这仅适用于.NET框架!
可以使用.NET 7以上版本(https://github.com/dotnet/runtime/issues/23937)
参见http://mikehadlow.blogspot.com/2012/07/tracing-systemnet-to-debug-http-clients.html
若要将System.net侦听器配置为同时输出到控制台和日志文件,请将以下内容添加到程序集配置文件中:
nfzehxib3#
网络跟踪也可用于下一个对象(参见msdn上的文章)
*System.Net.套接字Socket、TcpListener、TcpClient和Dns类的一些公共方法
*System.NetHttpWebRequest、HttpWebResponse、FtpWebRequest和FtpWebResponse类的一些公共方法,以及SSL调试信息(无效证书、缺少颁发者列表和客户端证书错误)。
*System.Net.HttpListenerHttpListener、HttpListenerRequest和HttpListenerResponse类的一些公共方法。
*System.Net.CacheSystem.Net.Cache中的一些私有方法和内部方法。
*System.Net.HttpHttpClient、委托处理程序、HttpClientHandler、HttpMessageHandler、消息处理程序和WebRequestHandler类的一些公共方法。
*System.Net.WebSockets.WebSocketClientWebSocket和WebSocket类的一些公共方法。
将以下代码行放到配置文件中:
vxf3dgd44#
最简单的解决方案是使用Wireshark并跟踪HTTPtcp流。