Dan*_*Dan 5 asp.net-mvc routes custom-attributes slug asp.net-mvc-5
我有一个这样的动作:
[HttpGet]
[Route("~/books/{id:int:min(1)}/{slug?}")]
public ActionResult Book(int? id, string slug)
{
if (slug == null)
{
slug = "awesome-book";
return RedirectToAction("Book", new { id, slug });
}
etc.
}
Run Code Online (Sandbox Code Playgroud)
问题是新路由的生成方式类似于“ books/1?slug=awesome-book ”,这不是我想要的,而是“ books/1/awesome-book ”。如何正确设置滑块?
这是生成路由 URL 时出现的问题。由于slug路由参数是可选的,因此路由框架会在 处停止/books/1,然后将 URL 未涵盖的任何参数添加为查询字符串,在本例中包括slug. 这是由于路由框架采用的短路系统造成的,您对此无能为力。
不过,有一个解决方法。如果您不使用可选参数,而是使用另一个路由,则可以命名该路由,然后显式引用它。例如:
[Route("~/books/{id:int:min(1)}", Order = 1)]
[Route("~/books/{id:int:min(1)}/{slug}", Order = 2, Name = "BookWithSlug")]
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令生成 URL:
return RedirectToRoute("BookWithSlug", new { id, slug });
Run Code Online (Sandbox Code Playgroud)
并且,您最终会得到您想要的 URL。
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |