C# 将数组传递给.Net核心Web API方法时始终获得404

C# 将数组传递给.Net核心Web API方法时始终获得404,c#,.net-core,asp.net-core-webapi,C#,.net Core,Asp.net Core Webapi,出于某种原因,我似乎无法将值数组传递给我的Web API方法。这是我的密码: [HttpGet("api/values/get/{ids}")] public JsonResult GetValues(string[] valueIds) { //Do something } 我已尝试通过以下URL调用此功能: 当我通过以下URL调用它时,我没有得到404,并且实际上调用了该方法,但是,该数组是空的: 我还尝试将属性[FromQuery]添加到方法签名中参数的前面,如

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

[HttpGet("api/values/get/{ids}")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}
我已尝试通过以下URL调用此功能:

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

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

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

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

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

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

否则,您可以很容易地检查您的API,除非使用UrlHelper。只需为自己生成一个url:


var url=url.Action(“GetValues”,new{valueIds=new[]{“das”,“ewq”})

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

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

否则,您可以很容易地检查您的API,除非使用UrlHelper。只需为自己生成一个url:


var url=url.Action(“GetValues”,new{valueIds=new[]{“das”,“ewq”})

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

[HttpGet("api/values/get")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}
并像这样应用请求

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

删除
{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/{ids}")]
public JsonResult GetValues(string[] valueIds)
{
   //Do something
}
  • 我建议删除
    /get
    ,因为您的请求方法是
    HttpGet
    中的
    get
  • 您指定的路由意味着已通过的
    ids
    (它只是一个变量,与
    get
    相同,只能是单数),即:
  • 您所展示的示例

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

    到目前为止,您的
    /get/{ids}
    路径是冗余的

    试一试

    查询:


    我建议大家在

    上读一读,让我们来看看你们的情况:

    [HttpGet("api/values/get/{ids}")]
    public JsonResult GetValues(string[] valueIds)
    {
       //Do something
    }
    
  • 我建议删除
    /get
    ,因为您的请求方法是
    HttpGet
    中的
    get
  • 您指定的路由意味着已通过的
    ids
    (它只是一个变量,与
    get
    相同,只能是单数),即:
  • 您所展示的示例

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

    到目前为止,您的
    /get/{ids}
    路径是冗余的

    试一试

    查询:


    我建议大家在

    上仔细阅读,我在那篇文章中尝试了与被接受答案完全相同的URL(这是我问题中的第三个),我在那篇文章中尝试了与被接受答案完全相同的URL(这是我问题中的第三个),这很有效。但我不明白当我只传递一个参数时它为什么会起作用。例如:[HttpGet(“api/values/get/byparent/{parentId}”)]。当我使用URL调用此方法时,将调用该方法并传递参数。“dsadasda”作为“parentId”参数传递。但是在疑问句中,没有命名为“ids”的参数。这是有效的。但我不明白当我只传递一个参数时它为什么会起作用。例如:[HttpGet(“api/values/get/byparent/{parentId}”)]。当我使用URL调用此方法时,将调用该方法并传递参数。“dsadasda”作为“parentId”参数传递。但在问题案例中,没有命名为“ids”的参数。