将数组的可选参数传递给webapi端点

时间:2017-12-20 17:59:14

标签: c# asp.net-core-webapi

我正在尝试编写一个端点,将一个可选的id数组作为参数,如下所示:

url safe key

目标是调用[HttpGet] public async Task<IActionResult> Get(int[] ids = null) { // do something } 将返回所有记录,而对/api/myendpoint的调用只会返回记录1和2。

我遇到的问题是对/api/myendpoint?ids=1&ids=2的调用实际上初始化了一个空的数组,而不是传递默认的空值。

有关如何强制它实际使用默认值的任何想法吗?

1 个答案:

答案 0 :(得分:-1)

这不是您问题的准确答案,但它确实提供了更清晰,更灵活的方法(我倾向于尽可能避免使用可选参数)。

您可以使用params来实现相同的行为:

public async Task<IActionResult> Get(
    params int[] ids) { ... }

现在,您可以针对所有ID调用Get(),或针对特定ID调用Get(1, 2)。对于所有效果,使用情况都是相同的,它完全避免了可选参数,恕我直言,这是一个优势。

另一种选择是简单地实现两个重载:

 public async Task<IActionResult> Get(
    int[] ids) { ... }

  public async Task<IActionResult> Get() { ... }

无论如何,检查ids.Length0是不是太繁重了。