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

时间:2015-10-02 09:37:42

标签: asp.net-mvc asp.net-web-api model-binding

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

1 个答案:

答案 0 :(得分:1)

int值为0,因为0与字符串的null相同。如果您希望int的值为null,请使用int?

Basicly:

int i = 0

是等于

的整数
string myString = null;

如果你想让你的int使用null:

int? i = null;

所以会发生什么是数组需要至少一个项目,它不会为该项目分配值。但由于整数的默认值为0,因此它将获得该值