强制路由占位符始终被视为查询字符串参数
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
结尾的 MyRoute
和 Page = 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
我在具有路由前缀的控制器中的操作上有以下路由:
[Route("{page?}", Name = "MyRoute")]
public async Task<ActionResult> Index(int page = 1)
IUrlHelper.RouteUrl
给我一个 url 以 /1
结尾的 MyRoute
和 Page = 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