gpt4 book ai didi

c# - 在 asp.net core 中将字典发布到 web api

转载 作者:行者123 更新时间:2023-11-30 14:07:38 25 4
gpt4 key购买 nike

我有使用 Asp.Net Core 开发的简单网络 api,我正在尝试使用 HttpClient 发布键值对。我尝试了两种方法。

第一种方法

[Route("api/[controller]/[action]")]
public class TransformationController : Controller
{
private IServiceResolver _serviceResolver;
public TransformationController(IServiceResolver serviceResolver)
{
_serviceResolver = serviceResolver;
}

[HttpPost]
[ActionName("Post1")]
public void Post1([FromBody]Dictionary<string, string> data)
{
// do something
}
}

然后我发布如下

    [Fact]
public void TestPost1()
{
var content = new Dictionary<string, string>();
content.Add("firstname", "foo");
var httpContent = new FormUrlEncodedContent(content);

var client = new HttpClient();
var result = client.PostAsync("http://localhost:17232/api/Transformation/Post1", httpContent).GetAwaiter().GetResult();
}

但是我得到了Unsupported Media Type错误

{StatusCode: 415, ReasonPhrase: 'Unsupported Media Type', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Date: Mon, 29 Aug 2016 19:44:44 GMT Server: Kestrel X-SourceFiles: =?UTF-8?B?QzpccmVwb3NcY3ItbWV0YXRhc2tlclxzcmNcSW5ib3VuZEludGVncmF0aW9uXFRyYW5zZm9ybWF0aW9ucy5BcGlcYXBpXFRyYW5zZm9ybWF0aW9uXFRyYW5zZm9ybWF0aW9uMQ==?= X-Powered-By: ASP.NET Content-Length: 0 }}

方法二
由于我无法在 FormUrlEncodedContent 中指定内容类型和编码,我更改了 post 方法的签名,现在它以 Json 字符串作为参数。想法是将字符串反序列化为字典。

    [HttpPost]
[ActionName("Post2")]
public void Post2([FromBody]string data)
{
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
// do something here

}

然后我发布下面的字符串

    [Fact]
public void TestPost2()
{
var httpContent = new StringContent("{ \"firstName\": \"foo\" }", Encoding.UTF8, "application/json");

var client = new HttpClient();
var result = client.PostAsync("http://localhost:17232/api/Transformation/Post2", httpContent).GetAwaiter().GetResult();
}

但是当我调试测试时; Post2方法中的data参数为null。

我不确定这两种方法都缺少什么?有人可以帮忙吗

更新1
如果我使用 POSTMAN 发布数据,那么它就可以工作了。所以对于方法 1,我可以将原始数据发布为

{
"firstname": "foo"
}

和 Approach2 将原始数据发布为

 "{\"firstname\": \"foo\"}"

但是当我使用 HttpClient 时相同的数据不起作用

最佳答案

尝试合并两种方法:

[Fact]
public void TestPost3()
{
var httpContent = new StringContent("{ \"firstName\": \"foo\" }", Encoding.UTF8, "application/json");

var client = new HttpClient();
var result = client.PostAsync("http://localhost:17232/api/Transformation/Post3", httpContent).GetAwaiter().GetResult();
}

[HttpPost]
[ActionName("Post3")]
public void Post3([FromBody]IDictionary<string, string> data)
{
// do something
}

关于c# - 在 asp.net core 中将字典发布到 web api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com