【问题标题】:Always getting 404 when passing an array to a .Net Core Web API method将数组传递给 .Net Core Web API 方法时总是得到 404
【发布时间】:2018-01-23 01:21:41
【问题描述】:

由于某种原因,我似乎无法将一组值传递给我的 Web API 方法。这是我的代码:

[HttpGet("api/values/get/{ids}")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}

我尝试通过以下 URL 调用它:

当我通过以下 URL 调用它时,我没有得到 404,并且实际上调用了该方法,但是数组为空:

我还尝试将属性 [FromQuery] 添加到方法签名中的参数前面,如下所示:

public JsonResult GetValues([FromQuery]string[] valueIds)

我似乎无法让它工作,即使那里的每个教程都说它应该。在这里扯我的头发。

【问题讨论】:

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


【解决方案1】:

删除 {ids} 前缀,因为操作选择器需要 ids 参数,但您没有在操作中传递它。

[HttpGet("api/values/get")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}

并像这样应用请求;

http://localhost:5001/api/values/get?valueIds=das&valueIds=ewq

【讨论】:

  • 这行得通。但是我不明白为什么当我只传递一个参数时它会起作用。例如:[HttpGet("api/values/get/byparent/{parentId}")]。当我使用 URL localhost:5001/api/values/byparent/dsadasda 调用此方法时,将调用该方法并传递参数。
  • “dsadasda”作为“parentId”参数传递。但在问题情况下,没有名为“ids”的参数。
【解决方案2】:

所以让我们分开你所拥有的:

[HttpGet("api/values/get/{ids}")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}
  1. 我建议删除/get,因为您的请求方法是get in HttpGet
  2. 您指定的路线意味着传递了ids(它只是一个与get 相同的变量,它只能是单数)即:

http://localhost:5001/api/values/get/id

你展示的例子。

http://localhost:5001/api/values/get/?valueIds=das&valueIds=ewq

get/?valueIds=das&valueIds=ewq 甚至没有指定{ids}

到目前为止,您的/get/{ids} 路线是多余的。

试试

[HttpGet("api/values")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}

查询:http://localhost:5001/api/values?valueIds=das&valueIds=ewq

我建议阅读REST API naming conventions

【讨论】:

    【解决方案3】:

    如果我错了,请纠正我,但我认为您需要使用 [] 后缀命名查询参数。像这样:

    http://localhost:5001/api/values/get?valueIds[]=das&valueIds[]=ewq

    否则,您可以轻松地检查您的 API,除了使用 UrlHelper。只需为自己生成一个 url:

    var url = Url.Action("GetValues", new { valueIds = new [] { "das", "ewq" } });

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多