- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我使用的是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
做到这一点?谢谢。
最佳答案
您的问题的直接答案是:不。PostAsync
的签名方法如下:
public Task PostAsync(Uri requestUri, HttpContent content)
因此,虽然您可以将 object
传递给 PostAsync
,但它必须是 HttpContent
类型,并且您的匿名类型不符合该标准。
但是,有一些方法可以完成您想要完成的事情。首先,您需要将匿名类型序列化为 JSON,最常用的工具是 Json.NET .这方面的代码非常简单:
var myContent = JsonConvert.SerializeObject(data);
接下来,您需要构造一个内容对象来发送此数据,我将使用 ByteArrayContent
对象,但您可以根据需要使用或创建不同的类型。
var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
var byteContent = new ByteArrayContent(buffer);
接下来,您要设置内容类型以让 API 知道这是 JSON。
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
然后您可以使用表单内容发送与您之前的示例非常相似的请求:
var result = client.PostAsync("", byteContent).Result
附带说明,像您在此处所做的那样调用 .Result
属性可能会有一些 bad side effects比如死锁,所以你要小心这个。
关于c# - 如何将对象传递给 HttpClient.PostAsync 并序列化为 JSON 主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36625881/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!