Как правильно перенаправить на маршруты MVC, используя старый URL-адрес сайта ASP? - PullRequest
0 голосов
/ 15 ноября 2018

Позвольте мне объяснить. Недавно я перенес классическое приложение asp в .net MVC4. Старый сайт состоял из множества html и aspx страниц, то есть:

  • book.html
  • contactus.aspx

естественно, к старому сайту asp обращались URL-адреса, такие как 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, это проблема, мне нужно найти решение из кода.

Я пробую некоторые решения, но не работаю.

Solution One

Для старой страницы aspxs можно создать страницы aspx в новом корне сайта с тем же именем, что и у старого сайта, и перенаправить на Page_Load из codebehind

//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-страницы вы можете определить простое обновление метатега

//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" }
        );

Как перенаправить на новые маршруты mvc, когда пользователь пытается правильно получить доступ к старому URL-адресу сайта asp? Нужно найти быстрое и экономичное решение, спасибо за помощь.

1 Ответ

0 голосов
/ 15 ноября 2018

Требуется перезапись URL-адресов на основе шаблона регулярных выражений. Обратитесь к этому 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>
...