我有以下路由,适用于调用 /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}")]
时,错误消息表示问号在那里无效。我想通过属性方法解决它,并且默认映射的路由不是一个选项。
答案 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) { ... }
}