如何使用MVC路由将URL从旧的WebForms站点重定向到新的MVC5站点上的子域

时间:2015-06-26 14:38:07

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我们正在将我们当前的网站从WebForms迁移和更新到MVC5。当前站点的一部分将被解耦并暂时作为独立站点在WebForms上运行,并且在新情况下将在其自己的子域中可访问。

在目前的情况下,我们有一堆URL看起来像这样:

www.site.com/foo/[..]/bar.aspx

在新的情况下,我们希望将这些网址重定向到以下内容:

www2.site.com/foo/[..]/bar.aspx

我想在MVC5中使用Route来捕获以foo开头的所有传入请求并将其路由到Redirect控制器。像这样:

routes.MapRoute(name: "RedirectFooBar", url: "foo(/.*)", defaults: new { controller = "Redirect", action = "FooBar" });

public ActionResult FooBar()
{
    return RedirectPermanent(Request.RawUrl.Replace("//www.", "//www2."));
}

不幸的是,由于url中的正则表达式,我的路由不是这样的。我想知道是否有可能实现我正在尝试使用MVC路由,如果有可能,我应该做些什么改变才能让它工作?

或许还有更好的方法来实现这类事情?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的想法是正确的,但您使用的是错误的语法。您应该像这样定义您的路线:

routes.MapRoute(name: "RedirectFooBar", url: "foo/{*path}", defaults: new { controller = "Redirect", action = "FooBar" });

{*path}将捕获从此点到网址末尾的所有内容。然后,您可以将其用作操作中的参数:

public ActionResult FooBar(string path)
{
    return RedirectPermanent("http://www2.site.com/foo/" + path);
}