强制路由占位符始终被视为查询字符串参数

Force route placeholder to be always treated as query string parameter

我在具有路由前缀的控制器中的操作上有以下路由:

[Route("{page?}", Name = "MyRoute")]
public async Task<ActionResult> Index(int page = 1)

IUrlHelper.RouteUrl 给我一个 url 以 /1 结尾的 MyRoutePage = 1 作为路由值。这没有错,但我希望 page 始终是查询字符串参数。

如何在 MVC 6 中执行此操作?如果可能的话,我想避免自己解析 RouteUrl 方法的结果并将页面设置为查询字符串参数。 Routing docs are still empty. This 答案建议使用 [FromUri] 属性,尽管听起来这有不同的用途,而且它似乎在 MVC 6 中不可用。

我通过在路由中没有参数 {page?} 来让它工作。

最初我有 [Route("Bar/{page?}", Name = "BarRoute")] 这给了我 /Bar/1

我让它可以与像这样设置的 Action 一起工作:

    [Route("Bar", Name = "BarRoute")]
    public IActionResult Foo(string page)
    {
        ViewBag.PN = page;
        return View("Index");
    }

这款剃须刀加价:

<li>@Html.RouteLink("Click here!", "BarRoute", new { page = 1 })</li>

生成:

<li><a href="/Bar?page=1">Click here!</a></li>

在控制器中:

ViewBag.Thing = this.Url.RouteUrl("BarRoute", new { page = 1 });

给予:

/Bar?page=1

此外,[Route("", Name = "BarRoute")] 生成了 http://localhost:62405/?page=1