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

时间:2016-01-20 20:40:14

标签: asp.net-mvc-routing asp.net-core-mvc

对于具有路由前缀的控制器中的操作,我有以下路由:

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

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

我怎样才能在MVC 6中这样做?如果可能的话,我想避免解析RouteUrl方法的结果并将页面设置为查询字符串参数。 Routing docs仍然是空的。 This回答建议使用[FromUri]属性,虽然听起来这有不同的用途,但似乎无法在MVC 6中使用。

1 个答案:

答案 0 :(得分:3)

我通过在路线中没有参数{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