如何正确使用旧的ASP站点URL重定向到MVC路由?

时间:2018-11-15 03:25:16

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

让我解释一下。最近,我将经典的ASP应用程序迁移到.net MVC4。旧站点由很多html和aspx页面组成,即:

  • index.html
  • book.html
  • contactus.aspx

自然,旧的asp网站是通过 www.library.com/index.html、www.library.com/book.html、www.library.com/contactus.aspx 等网址访问的等

现在,可以通过路由器访问当前的MVC站点,即 www.library.com/Home、www.library.com/Book、www.library.com/Contact

许多公司客户尝试使用旧的URL访问新站点,这是一个问题,我需要从代码中找到解决方案。

我尝试了一些解决方案,但是没有用。

解决方案一

对于旧的aspxs页面,可以在新站点的根目录上以与旧站点相同的名称创建aspx页面,并在Page_Load中从代码隐藏处重定向

//Create contactus.aspx on root directory project and redirect
public partial class Contact : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.RedirectToRoute(new { controller = "Contact", action = "Index" });
    }
} 

对于html页面,您可以在meta标签上定义简单的刷新

//Create a html page, i.e., index.html
<meta http-equiv="refresh" content="0; url=http://library.com/Home" />
<p><a href="http://example.com/">Redirect</a></p>

这不是一个可行的解决方案,必须为每个所需的重定向创建一个html页面或aspx页面。

解决方案2

我尝试在Global.asax上定义重定向条件,但是不起作用

    protected void Application_BeginRequest(object sender, EventArgs e )
    {
        string url = Request.Url.ToString().ToLower();

        if (url.Contains("index.html"))
            Context.Response.RedirectPermanent("/Home");

        else if (url.Contains("book.html"))
            Context.Response.RedirectPermanent("/Book");

        else if (url.Contains("contactus.aspx"))
            Context.Response.RedirectPermanent("/Contact");
    }

解决方案3

我已经尝试在RouteConfig.cs上定义用于重定向的地图,但也无法正常工作

        //Trying redirect on RegisterRoutes() in RouteConfig.cs
        routes.MapRoute(
            name: "Home",
            url: "index.html",
            defaults: new { controller = "Home", action = "Index" }
        );

        routes.MapRoute(
            name: "Book",
            url: "book.html",
            defaults: new { controller = "Book", action = "Index" }
        );

        routes.MapRoute(
            name: "Contact",
            url: "contactus.aspx",
            defaults: new { controller = "Contact", action = "Index" }
        );

当用户尝试正确访问旧的ASP站点URL时,如何重定向到新的MVC路由?需要找到一种快速且经济的解决方案,谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要根据正则表达式模式进行网址重写。请参阅此thread,OP(@Eilimint)已内联更新了解决方案。这可能是一个优雅的解决方案,允许我们在不更改代码的情况下进行覆盖。

<rule name="Redirect to new domain" stopProcessing="true">
  <match url="^(.*)$" />
  <conditions>            
    <add input="{HTTP_HOST}" matchType="Pattern" pattern="^olddomain(:\d+)?$" />
  </conditions>
  <action type="Redirect" url="https://my.newdomain.io/{R:1}" redirectType="Permanent" />
</rule>