Nib*_*Pig 5 asp.net-mvc model-binding asp.net-web-api
我在我的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);
}
Run Code Online (Sandbox Code Playgroud)
http://localhost/api/SomeEntity/ByIds?ids=1&ids=2
例如,如果你点击这个,就会得到一个1和2的数组,正如你所期望的那样.
如果你点击它http://localhost/api/SomeEntity/ByIds?ids=
可能会得到一个空数组,但你得到int[1]
一个值0
.
我怀疑发生了什么是它将其识别为指定的一个元素,无法转换它,因此使用default(int)
并将其放入数组中,这会为您提供一个具有一个值的int数组,值为0.
但是,如果你点击它http://localhost/api/SomeEntity/ByIds?ids=potato
然后你得到一个无效的模型状态,我自动处理它.
问题是,将空查询参数值映射到空数组或ModelState错误(即,如果提供空值,则与马铃薯行为相同)的方法是什么?我认为模型状态错误是首选,更合乎逻辑.
出现 int 值 0 是因为 0 与字符串的 null 相同。如果您希望 int 的值为 null,请使用 int?
基本上:
int i = 0
Run Code Online (Sandbox Code Playgroud)
整数等于
string myString = null;
Run Code Online (Sandbox Code Playgroud)
如果你希望你的 int 为空,请使用:
int? i = null;
Run Code Online (Sandbox Code Playgroud)
所以发生的情况是数组至少需要一项,它不会为该一项分配值。但由于整数的默认值为 0,因此它将获取该值
归档时间: |
|
查看次数: |
226 次 |
最近记录: |