【发布时间】:2020-09-15 20:24:41
【问题描述】:
无法将字符串列表传递给 Web API 端点。为什么?
这是我的控制器:
[Route("[controller]")]
[ApiController]
public class MyController
{
[HttpPost("foo")]
public string MyMethod(List<string> strs)
{
return "foo";
}
}
这就是我试图称呼它的方式:
var strs = new List<string> { "bar" };
var json = JsonConvert.SerializeObject(strs);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpCliet.PostAsync("/My/foo", content);
在调用端点之前,我在return "foo"; 行上放置了一个断点。一旦断点被击中,MyController.MyMethod 内的strs 列表为空。 strs 不为空,但它不包含任何元素。虽然我的意图和期望是看到 strs 包含一个元素,即字符串 "bar"。
我在创建和使用 HttpClient 的项目中使用 ASP.NET Core 2.2。我在有端点的项目中使用相同的 ASP.NET Core 2.2。
我不确定这里有什么问题。我检查了一些来源。例如。以下:
C# HTTP post , how to post with List<XX> parameter?
https://carldesouza.com/httpclient-getasync-postasync-sendasync-c/
https://blog.jayway.com/2012/03/13/httpclient-makes-get-and-post-very-simple/
根据这些资源,我找不到我缺少的东西。
更新
以下电话按预期对我有用:
var json = JsonConvert.SerializeObject(string.Empty);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await server.CreateClient().PostAsync("/My/foo?strs=bar", content);
也许有人知道为什么我的例子中的参数只从查询字符串中读取,而不是从正文中读取?
【问题讨论】:
-
使用你的代码,我似乎在api中得到了调用,所以可能是你的机器?
-
我不确定。不过谢谢。 :)
标签: list asp.net-core post parameters httpclient