私の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;
}
}
すごくありがとう!! あなたは本当に私の一日を保存しました:) –