如何在web api中创建一个int []参数?

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错误(即,如果提供空值,则与马铃薯行为相同)的方法是什么?我认为模型状态错误是首选,更合乎逻辑.

Teu*_*Vos 1

出现 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,因此它将获取该值