首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将对象传递给HttpClient.PostAsync并将其序列化为JSON体?

如何将对象传递给HttpClient.PostAsync并将其序列化为JSON体?
EN

Stack Overflow用户
提问于 2016-04-14 22:15:52
回答 6查看 273.2K关注 0票数 120

我正在使用System.Net.Http,我在网上找到了几个例子。我设法创建了用于发出POST请求的代码:

public static string POST(string resource, string token)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(baseUri);
        client.DefaultRequestHeaders.Add("token", token);

        var content = new FormUrlEncodedContent(new[]
        {
             new KeyValuePair<string, string>("", "")
        });

        var result = client.PostAsync("", content).Result;
        string resultContent = result.Content.ReadAsStringAsync().Result;
        return resultContent;
    }
 }

一切运行正常。但是假设我想要向POST方法传递第三个参数,一个名为data的参数。数据参数是一个如下所示的对象:

object data = new
{
    name = "Foo",
    category = "article"
};

在不创建KeyValuePair的情况下如何做到这一点呢?我的php RestAPI等待json输入,所以FormUrlEncodedContent应该正确地发送raw json。但是我如何使用Microsoft.Net.Http做到这一点呢?谢谢。

EN

回答 6

Stack Overflow用户

发布于 2016-04-14 22:30:13

您需要在请求正文中以原始字符串而不是FormUrlEncodedContent的形式传递数据。一种方法是将其序列化为JSON字符串:

var json = JsonConvert.SerializeObject(data); // or JsonSerializer.Serialize if using System.Text.Json

现在,您需要做的就是将字符串传递给post方法。

var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json"); // use MediaTypeNames.Application.Json in Core 3.0+ and Standard 2.1+

var client = new HttpClient();
var response = await client.PostAsync(uri, stringContent);
票数 84
EN

Stack Overflow用户

发布于 2016-04-14 22:48:33

一个简单的解决方案是使用NuGet中的Microsoft ASP.NET Web API 2.2 Client

然后,您可以简单地执行此操作,它会将对象序列化为JSON,并将Content-Type标头设置为application/json; charset=utf-8

var data = new
{
    name = "Foo",
    category = "article"
};

var client = new HttpClient();
client.BaseAddress = new Uri(baseUri);
client.DefaultRequestHeaders.Add("token", token);
var response = await client.PostAsJsonAsync("", data);
票数 53
EN

Stack Overflow用户

发布于 2021-01-27 06:04:44

新的.NET 5解决方案:

在.NET 5中,引入了一个名为JsonContent的新类,它是从HttpContent派生的。See in Microsoft docs

该类包含一个名为Create()的静态方法,它接受任意对象作为参数,顾名思义,它返回JsonContent的一个实例,然后可以将该实例作为参数传递给PostAsync方法。

用法:

var myObject = new
{
    foo = "Hello",
    bar = "World",
};

JsonContent content = JsonContent.Create(myObject);

HttpResponseMessage response = await _httpClient.PostAsync("https://...", content);
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36625881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档