Url.Link()没有生成与查询字符串的正确链接

时间:2016-12-21 00:38:05

标签: asp.net-web-api asp.net-core asp.net-web-api-routing

我正在创建一个具有可选参数的路由的ASP.NET Core WebAPI。在返回结果中,我将链接嵌入"之前的"和" next"页面。我使用Url.Link()生成这些链接,但创建的链接未生成正确的网址。

示例代码:

  [HttpGet("{page:int?}", Name = "GetResultsRoute")]
  public IActionResult GetResults([FromQuery]int page = 0)
  {
     ...
     var prevUrl = Url.Link("GetResultsRoute", new { page = page - 1 });
     var nextUrl = Url.Link("GetResultsRoute", new { page = page + 1 });
     ...

生成的网址如下:

" http://localhost:65061/api/results/1"

我想要的是:

" http://localhost:65061/api/results?page=1"

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

我认为你在这里正在做的一切。只是MVC能够将Url.Link中的[page]值与路由约束HttpGet(“{page:int?}”)匹配,从而将其作为URL路径的一部分附加,例如results / 1 从docs - 忽略与参数不匹配的环境值,并且当显式提供的值覆盖它时,也会忽略环境值,在URL中从左向右。 显式提供但与任何内容不匹配的值将添加到查询字符串中。 在你的情况下,

var prevUrl = Url.Link("GetResultsRoute", new { pageX = page - 1 });

会导致

http://localhost:65061/api/results?pageX=1

因此,以太自己附加查询字符串参数,删除约束,或切换到MVC推荐的URL格式,例如/ API /结果/ XXX