Update:如果您使用的是 .NET 5 或更高版本,请使用这个解决方案.
对你的问题的直接回答是:不。签名PostAsync方法如下:
公共任务 PostAsync(Uri requestUri,HttpContent 内容)
所以,虽然你可以通过object
to 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
像你在这里做的财产可以有一些不良副作用比如死锁,所以你要小心这一点。