我的api上有一堆操作,它们是通用的GetById和GetByIds,它们将实体拉出并通过格式化程序返回。
这些操作如下所示:
[HttpGet]
[Route("ByIds")]
public IHttpActionResult ByIds([FromUri]int[] ids)
{
var items = _myContext.SomeEntity.Where(a => ids.Contains(a.ID)).ToList();
return SomeFormatter(items);
}
如果您使用http://localhost/api/SomeEntity/ByIds?ids=1&ids=2
进行此操作,则会得到一个1和2的数组,如您所愿。
如果您使用http://localhost/api/SomeEntity/ByIds?ids=
点击此处,则可能会获得一个空数组,但其中int[1]
的值为0
。
我怀疑发生了什么是它将其识别为指定的一个元素,无法转换它,因此使用default(int)
并将其放入数组中,这会为您提供一个具有一个值的int数组,值为0. / p>
但是如果你用http://localhost/api/SomeEntity/ByIds?ids=potato
点击它,那么你会得到一个无效的模型状态,我会自动处理它。
问题是,将空查询参数值映射到空数组或ModelState错误(即,如果提供空值,则与马铃薯行为相同)的方法是什么?我认为模型状态错误是首选,更合乎逻辑。
答案 0 :(得分:1)
int值为0,因为0与字符串的null相同。如果您希望int的值为null,请使用int?
Basicly:
int i = 0
是等于
的整数string myString = null;
如果你想让你的int使用null:
int? i = null;
所以会发生什么是数组需要至少一个项目,它不会为该项目分配值。但由于整数的默认值为0,因此它将获得该值