对于具有路由前缀的控制器中的操作,我有以下路由:
[Route("{page?}", Name = "MyRoute")]
public async Task<ActionResult> Index(int page = 1)
IUrlHelper.RouteUrl
为我提供了一个以/1
结尾的MyRoute
和Page = 1
作为路线值的网址。这没有错,但我希望page
始终是一个查询字符串参数。
我怎样才能在MVC 6中这样做?如果可能的话,我想避免解析RouteUrl
方法的结果并将页面设置为查询字符串参数。 Routing docs仍然是空的。 This回答建议使用[FromUri]
属性,虽然听起来这有不同的用途,但似乎无法在MVC 6中使用。
答案 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