如何使用[HttpGetAttribute]路由包括AspNet.Core WebApi应用程序中的查询字符串?

时间:2016-11-22 23:00:07

标签: c# asp.net-web-api routing asp.net-core query-string

我有以下路由,适用于调用 /api/demo/info/34

[Route("api/demo")]
public class Demo : Controller
{
    [HttpGet("Info/{x}")]
    public JsonResult GetInfos(string x) { ... }
}

现在,我想传递一个查询字符串来选择ID,如下所示: /api/demo/info?x=34 。我应该如何重新定义该属性?

当我尝试输入 [HttpGet("Info?x={x}")] 时,错误消息表示问号在那里无效。我想通过属性方法解决它,并且默认映射的路由不是一个选项。

2 个答案:

答案 0 :(得分:2)

您需要做的就是将您的属性声明为:

[HttpGet("Info")]

同时将方法的签名保持为GetInfos(string x)。在GET路由中,WebAPI从签名中获取所有参数,并且只要查询字符串中的名称与参数名称匹配,就可以将路径中不存在的参数作为查询字符串参数传递。

答案 1 :(得分:1)

只需从路径中删除参数,框架就会根据操作的参数对其进行解释。

[Route("api/demo")]
public class Demo : Controller {
    //GET api/demo/info?x=34
    [HttpGet("Info")]
    public JsonResult GetInfos(string x) { ... }
}