我正在尝试创建一个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