Asp.net mvc 3 处理重命名控制器的最佳方法

Asp.net mvc 3 处理重命名控制器的最佳方法,asp.net-mvc-3,redirect,Asp.net Mvc 3,Redirect,使用ASP.NET MVC3,站点处于测试阶段,客户决定重命名其中一个控制器 http://domain.com/foo[/*] -> http://domain.com/bar[/*] 处理重定向的最直接的方法是什么,这样我就不会破坏任何foo书签?如果你能在IIS中找到方法,302重定向就可以了。这个屏幕截图显示它是一个。或者,如果您正在使用Castle Windsor,您可能希望使用()保留旧的控制器,以便旧的URL仍然工作 或者添加重写规则。比如: domain.com/foo(

使用ASP.NET MVC3,站点处于测试阶段,客户决定重命名其中一个控制器

http://domain.com/foo[/*] -> http://domain.com/bar[/*]

处理重定向的最直接的方法是什么,这样我就不会破坏任何foo书签?

如果你能在IIS中找到方法,302重定向就可以了。这个屏幕截图显示它是一个。或者,如果您正在使用Castle Windsor,您可能希望使用()

保留旧的控制器,以便旧的URL仍然工作

或者添加重写规则。比如:

domain.com/foo(/[_0-9a-z-]+)
致:

IIS中的URL重写 http://www.iis.net/download/URLRewrite


如果您使用的是MVC.NET,您可能已经安装了URL Rewrite。

另一个选项是在Global.asax.cs中为旧控制器名称注册特定路由

routes.MapRoute(
    "RenamedController",                                              // Route name
    "[OldControllerName]/{action}/{id}",                           // URL with parameters
    new { controller = "[NewControllerName]", action = "Index", id = "" }  // Parameter defaults
);

在标准默认路由之前添加该选项,您的新控制器应响应新旧名称。

重写规则在哪里?正如32bitkid提到的,您可以使用MVC.NET路由进行重写。谢谢,这正是我所希望的,并给了我想要的301重定向。给IIS一个机会,虽然听起来301更准确。谢谢,但您发送给我的方向不允许我所需的灵活性。尝试此操作是因为我讨厌IIS:)这将重定向写入的id,还是将其切掉?好吧,这种方法与其说是重定向,不如说是两条路由通过同一控制器。查看这个URL以获得更好的文档:哦,有趣的是,它实际上保留了旧的URL而不是重定向。好吧,我赞成让我学习MapRoute,但我认为这不能满足我的要求。
routes.MapRoute(
    "RenamedController",                                              // Route name
    "[OldControllerName]/{action}/{id}",                           // URL with parameters
    new { controller = "[NewControllerName]", action = "Index", id = "" }  // Parameter defaults
);