自定义路由而不更改URL

时间:2014-02-19 20:45:45

标签: c# asp.net-mvc-4 asp.net-mvc-routing

我有一个控制器和一个视图,当我传递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。我如何实现这一目标。

2 个答案:

答案 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+" } 
    );