我有一个方法可以完成下面这样的帖子

var response = await client.PostAsJsonAsync(url, entity);

if (response.IsSuccessStatusCode)
{
        // read the response as strongly typed object
        return await response.Content.ReadAsAsync<T>();
}

我的问题是如何获得从Entity对象发布的实际JSON.我想记录发布的JSON,所以不用自己做JSON序列化就可以了.

推荐答案

你可以这样做的一个例子:

注意:

  • LoggingHandler在将请求处理到HttpClientHandler之前截取请求,HttpClientHandler最终写入连线.

  • PostAsJsonAsync扩展在内部创建ObjectContent,当在LoggingHandler中调用ReadAsStringAsync()时,它会导致格式化程序

Logging handler:

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;
    }
}

Chain the above LoggingHandler with HttpClient:

HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;

Output:

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!"

.net相关问答推荐

从没有流的EventStore中读取流不存在异常

.NET Core 中的微服务

.NET 中两个子字符串之间的非贪婪正则表达式匹配

信号量的多线程问题

如何在选项卡中 Select Winforms NumericUpDown 中的所有文本?

在c#中计算中位数

如何在 C# 中创建表达式树来表示String.Contains("term")?

JavaScript 中的IsNullOrWhitespace?

添加新实体标量时实体框架 4 映射片段错误

XmlNode 值与内部文本

使用 .NET 中的代码更改桌面墙纸

什么版本的 .NET 附带什么版本的 Windows?

修剪数组中的所有字符串

从 Windows 窗体打开 URL

如何在 WebBrowser 控件中注入 Javascript?

一个接口是否应该继承另一个接口

为什么发布和调试模式下的代码行为不同?

说明 C# 中 volatile 关键字的用法

如何从 WCF REST 方法返回自定义 HTTP 状态代码?

为 webClient.DownloadFile() 设置超时