List 无法将字符串列表传递给Web API终结点。为什么?

List 无法将字符串列表传递给Web API终结点。为什么?,list,asp.net-core,post,parameters,httpclient,List,Asp.net Core,Post,Parameters,Httpclient,无法将字符串列表传递给Web API终结点。为什么? 这是我的控制器: [Route("[controller]")] [ApiController] public class MyController { [HttpPost("foo")] public string MyMethod(List<string> strs) { return "foo"; } } [Http

无法将字符串列表传递给Web API终结点。为什么?

这是我的控制器:

[Route("[controller]")]
[ApiController]
public class MyController
{
    [HttpPost("foo")]
    public string MyMethod(List<string> strs)
    {
        return "foo";
    }
}
[HttpPost("foo")]
        public string MyMethod(List<string> strs)
        {
            return "foo";
        }

也许有人知道为什么我的例子中的参数只从查询字符串中读取,而不是从正文中读取?

您可以在
客户端中将url更改为完整url。PostAsync
。下面是一个演示:

Api(本地主机:44379):

天气预报员:

[Route("[controller]")]
[ApiController]
public class MyController
{
    [HttpPost("foo")]
    public string MyMethod(List<string> strs)
    {
        return "foo";
    }
}
[HttpPost("foo")]
        public string MyMethod(List<string> strs)
        {
            return "foo";
        }
[HttpPost(“foo”)]
公共字符串MyMethod(列表strs)
{
返回“foo”;
}
呼叫(本地主机:44326):

公共异步任务CheckAsync(){
HttpClient=新的HttpClient();
var strs=新列表{“bar”、“bar1”、“bar2”};
var json=JsonConvert.SerializeObject(strs);
var content=newstringcontent(json,Encoding.UTF8,“application/json”);
var response=wait client.PostAsync(“https://localhost:44379/WeatherForecast/foo“,内容);
返回Ok(响应);
}
结果:

使用您的代码,我似乎在api中得到了调用,所以可能是您的机器?我不确定。但是谢谢你非常感谢。我会检查我这边的一些事情,然后重新接受你的答案。我已经更新了我的问题。你能检查一下吗?也许更新的细节对你有意义。因为对我来说,这真的很令人困惑我没能解决我的问题。但我会接受你的回答。因为,这个问题对我的环境来说似乎非常特殊。因此,外部援助似乎不是一个可行的机会。谢谢你,祝你今天愉快。
public async Task<IActionResult> CheckAsync() {
            HttpClient client = new HttpClient();
            var strs = new List<string> { "bar","bar1","bar2" };
            var json = JsonConvert.SerializeObject(strs);
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            var response = await client.PostAsync("https://localhost:44379/WeatherForecast/foo", content);
            return Ok(response);
        }