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

问题描述 投票:0回答:1

我正在创建一个 ASP.NET Core WebAPI,它具有带有可选参数的路由。在返回结果中,我嵌入了“上一页”和“下一页”的链接。我正在使用

Url.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

我在这里做错了什么?

asp.net-web-api asp.net-core asp.net-web-api-routing
1个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.