Url.Link() 未使用查询字符串生成正确的 link

Url.Link() not generating proper link with querystring

我正在创建一个 ASP.NET 核心 WebAPI,它有一个带有可选参数的路由。在 return 结果中,我将 link 嵌入到 "previous" 和 "next" 页面。我正在使用 Url.Link() 来生成这些 link,但是创建的 link 没有生成正确的 URL.

示例代码:

  [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 });
     ...

生成的 URL 类似于:

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

我想要的是:

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

我做错了什么?

我认为你在这里做的一切。它只是 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

所以以太自己附加查询字符串参数,删除约束,或者切换到 URL 的 MVC 推荐格式,例如/api/results/xxx