我有一个控制器和一个视图,当我传递ID时返回书籍信息,例如:
/Content/Index?id=1
现在我想将其作为最终用户的友好URL。例如: Books / BookName(Id 1映射到的书的名称)
所以我在global.asax中添加了一个路由值:
route.maprRoute(name:"custom", url:"Books/{bookname}",
defaults: new {controller = "bookMap", action ="index"}
在“BookMap”控制器中的我得到了bookname并将其转换为ID(即1) 并通过传递ID作为参数来重定向到内容/索引。 这很好用。但问题是我想在重定向到视图后保留友好名称。现在它更改为Content / Index?id = 1。但我想保留友好的URL,即Books / BookName。我如何实现这一目标。
答案 0 :(得分:0)
您可以使用HttpContext.RewritePath(url)
进行“内部”重定向,以保留外部网址。用它代替RedirectToAction
。但请注意,目前MVC框架并未正确支持它,因此实施它会有点“hacky”。
答案 1 :(得分:0)
你应该改变你的路线:
routes.MapRoute(
"Books",
"book/{bookname}/{bookid}",
new { controller = "book", action = "Index", bookname = UrlParameter.Optional },
new { id = @"\d+" }
);