2016-06-14 16 views
1

私のWebフォームアプリケーションがMVCアプリケーションに移行されたとします。レガシーWebフォームのURLはhttp://localhost/Details.aspx?id=100&t=77で、表示の詳細に使用されています。MVCコントローラへのlegecy URLのマップとアクション

同じページの新しいMVC URLですhttp://localhost/Home/Details/

コントローラー=ホーム、アクション=詳細

検索エンジンのクローラレガシーのURLのように応答ステータスを返した場合にのみ、レガシーのURLに対応する新しいURLで、検索データベースを更新新しいURLの場所で「301 Moved Permanently」を選択します。

私のアプリケーションは、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

問題は、あなたがMVCが一致するルート考えることがないですあなたのルートからnullに戻ってきているということである。しかし、ルートは301リダイレクトを発行することはできませんそのためにはコントローラーが必要ですので、解決方法はroute to a controller and do the 301 from thereです

+0

すごくありがとう!! あなたは本当に私の一日を保存しました:) –

関連する問題