如何路由到api / values?id = 1&type = 2

时间:2019-04-01 21:10:34

标签: .net routing asp.net-core-webapi core asp.net-core-2.1

我正在使用.net core 2.1 Web API。我有一个ValuesController和api / values / 5&api / values /之类的路由可以正常工作。但是现在我想路由到类似api / values?id = 5&type = 2的东西。可能有这样的路线吗?

我已经搜索了stackoverflow和其他站点,但是还没有找到一种方法。我尝试使用下面的代码,但不起作用。

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return "value" + id;
        }

        [HttpGet]
        public ActionResult<string> Get(int id, int type)
        {
            return "value: " + id + "with type: " + type;
        }
    }

我想作为api / values?id = 5&type = 2或api / values / id = 5&type = 2路由

2 个答案:

答案 0 :(得分:0)

您不能通过查询字符串来区分路线。您应该合并两个“获取”方法并调用api/values?id=5&type=2

[HttpGet]
public ActionResult Get(int id, int type)
{

    if (id == 0 && type == 0)
    {
        return Ok(new string[] { "value1", "value2" });
    }
    else
    {
        return Ok("value: " + id + " with type: " + type);
    }
}

答案 1 :(得分:0)

尝试以下更改:

    [HttpGet]
    [Route("id={id}&type={type}")]   // GET api/values/id=5&type=2
    public ActionResult<string> Get(int id, int type)
    {
        return "value: " + id + "with type: " + type;
    }