我正在创建一个具有可选参数的路由的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"
我在这里做错了什么?
答案 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