我们正在将我们当前的网站从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路由,如果有可能,我应该做些什么改变才能让它工作?
或许还有更好的方法来实现这类事情?
谢谢!
答案 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);
}