2016-06-14 54 views
1

假設我的Web窗體應用程序已遷移到MVC應用程序。舊版網絡表單網址是http://localhost/Details.aspx?id=100&t=77,它用於顯示詳細信息。將legecy url映射到MVC控制器和動作

新的MVC網址可以在同一頁是http://localhost/Home/Details/

控制器=家庭,行動=詳細

搜索引擎爬蟲更新對應於舊有的網址新網址的搜索數據庫只有當舊有的網址返回響應狀態爲新的網址位置「301永久移動」。

我的應用程序託管在Microsoft Azure上。

什麼是最好的方式來確保舊的網址會獲得新的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

的問題是,你是從你的路線,這使得MVC從來沒有認爲這是一個匹配的路由返回null,但是路線不能發出301重定向對此,你需要一個控制器,所以,解決方案是route to a controller and do the 301 from there

+0

哇這真棒!非常感謝你。 你真的救了我的一天:) –

相關問題