2016-06-14 3 views
1

Предположим, что мое приложение для веб-форм перенесено в приложение MVC. Унаследованный URL-адрес веб-формы - http://localhost/Details.aspx?id=100&t=77, который использовался для отображения деталей.Map legecy url to MVC Controller and action

Нового MVC URL для одной и той же страницы http://localhost/Home/Details/

Controller = Home, Action = Подробности

Поисковой система Искатели обновить свою базу данных поиска с новым URLs, соответствующим унаследованных URLs только если устаревшие адреса возвратом статуса ответа, как «301 перемещен навсегда» с новым местоположением URL.

Мое приложение размещено на microsoft Azure.

Каков наилучший способ убедиться, что старый url получит доступ к новым контроллерам и действиям mvc.

Я попробовал это, но это не будет работать :(

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 


     routes.Add(new LegacyUrlRoute()); 

    } 
} 

public class LegacyUrlRoute : RouteBase 
{ 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     const string status = "301 Moved Permanently"; 

     var request = httpContext.Request; 
     var response = httpContext.Response; 
     var legacyUrl = request.Url.ToString(); 

     var newUrl = ""; 

     var id = request.QueryString[0]; 
     var t = request.QueryString[1]; 

     if (legacyUrl.Contains(".aspx")) 
     { 
      newUrl = $"Home/Details?id={id}&t={t}"; 
      response.Status = status; 
      response.RedirectLocation = newUrl; 
      response.End(); 
     } 
     return null; 
    } 

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, 
       RouteValueDictionary values) 
    { 
     return null; 
    } 
} 

ответ

1

Проблема заключается в том, что вы возвращаете null от вашего маршрута, что делает MVC никогда не считают это соответствие маршрута. Но маршрут не может выдать 301 редирект Само по себе - для этого вам нужен контроллер. Итак, решение - route to a controller and do the 301 from there.

+0

Wow thats awesome !! Большое вам спасибо. Вы действительно спасли мой день :) –

Смежные вопросы