在C#中的HTTPGet请求中传递可变数量的多个参数



我正在尝试创建一个web API。作为它的一部分,我想创建一个Get方法,它可以接受任何数量的特定类型的变量。

public class MyController : ControllerBase
{
[HttpGet]
public int[] Get(int[] ids)
{
for(int i = 0; i < ids.Length; i++)
{
ids[i] = ids[i] * 100;
}
return ids;
}
}

当我试图使用从邮递员那里发出获取请求时

https://localhost:44363/api/executionstatus?ids=1&ids=2&ids=3

我收到一个错误

{"类型":";https://tools.ietf.org/html/rfc7231#section-6.5.1"标题":"一个或多个验证错误发生&"状态":400;traceId":"39f5d965-4240af31edd27f50"错误":{"$":["JSON值可以无法转换为系统。Int32[]。路径:$|LineNumber:0|BytePositionInLine:1

我也尝试过

https://localhost:44363/api/executionstatus?ids=1,2,3

但是它也导致了相同的错误。传递/处理get请求中的多个参数的正确方法是什么?

我认为,如果您明确提到要从查询字符串中读取变量,那么它在您描述的方法中会很好地工作:

//.net Core
public int[] Get([FromQuery]int[] ids)
//.net Framework
public int[] Get([FromUri]int[] ids)

呼叫:

https://localhost:44363/api/executionstatus?ids=1&ids=2&ids=3

也许您可以尝试使用字符串参数

[HttpGet]
public int[] Get(string ids)
{
var intIds = ids.Split(',').Select(int.Parse).ToList();
for(int i = 0; i < intIds.Length; i++)
{
intIds[i] = intIds[i] * 100;
}
return intIds;
}

并像这样调用你的api

https://localhost:44363/api/executionstatus?ids=1,2,3

最新更新