C# HTTP 415,当我添加字符串数组作为参数时

C# HTTP 415,当我添加字符串数组作为参数时,c#,.net,asp.net-core,C#,.net,Asp.net Core,我正在开发一个API,在这个API中,我希望为用户提供一个选项,除了传递另一个字符串参数外,还可以传递ID列表 这项工作: [HttpGet(“{category}”)] 公共IEnumerable Get(字符串类别) { return\u databaseService.GetProductsCollection(类别) .Find(=>true) .ToEnumerable(); } 但是,如果我为productID向该方法添加一个字符串[]/IEnumerable/IList/列表,它

我正在开发一个API,在这个API中,我希望为用户提供一个选项,除了传递另一个字符串参数外,还可以传递ID列表

这项工作:

[HttpGet(“{category}”)]
公共IEnumerable Get(字符串类别)
{
return\u databaseService.GetProductsCollection(类别)
.Find(=>true)
.ToEnumerable();
}
但是,如果我为productID向该方法添加一个
字符串[]
/
IEnumerable
/
IList
/
列表,它将停止工作,并获得如下HTTP 415

[HttpGet(“{category}”)]
公共IEnumerable Get(字符串类别,字符串[]ProductID)
{
return\u databaseService.GetProductsCollection(类别)
.Find(=>true)
.ToEnumerable();
}
{
“类型”:https://tools.ietf.org/html/rfc7231#section-6.5.13",
“标题”:“不支持的媒体类型”,
“地位”:415,
“traceId:“00-0a39fd26ca04564a8897c03898b98c64-cfbf424ec3163344-00”
}
我做错了什么?我试着在网上搜索,但没有找到任何相关的东西。我试图使用的URL格式为
api/products/electronics?productIds=45A&productIds=72C
。我不能使用类似于
productId=45A,72C
的东西,然后用逗号进行拆分,因为我的方法会与同一资源上的另一个路由(
{category}/{productId}
)冲突,从而获取特定的产品

我正在.NET5.0上使用ASP.NETCore。不确定是.NET版本导致问题还是其他原因


如果您还有其他建议,请随时告诉我

您应该将输入序列化为JSON字符串,并将该字符串发送到API。使用这种方法,您可以在API中接收一个字符串,您可以对其进行反序列化(例如,使用Newtonsoft JSON)。

尝试使用
[FromQuery]
属性,显式名称如下:
[FromQuery(name=“productId”)]

它应该会起作用。

虽然这会起作用,但感觉像是一种变通方法。通常JSON字符串将通过POST和PUT发送。这是一个很好的例子。我还看到了与此相关的API。我相信应该有一种方法可以像我尝试的那样解决这个问题。如果你在API中用[FromQuery]属性注释string[]productIds参数呢?是的,就是这样!尝试使用
[FromQuery]
属性,并使用如下显式名称<代码>[FromQuery(Name=“productid”)]
。它应该会起作用。我还没试过这么难。是的,成功了!非常感谢。关于这一点,这些属性有什么好的参考吗?我已经阅读了官方文件,但我发现理解他们是如何利用路线和其他属性有点混乱。事实上,我是从经验中了解到这一点的。不过,您可以通过此链接阅读有关Asp.Net Core中模型绑定的更多信息,谢谢!我来看看。你也许可以用它来回答这个问题,这样我就可以把它作为答案了。太好了。我补充了一个答案。