あなたが言及した記事に応じて、これを達成するための手順は次のとおりです。
1-LegacyHandler はクエリ文字列 (この場合はアーティストの ID) からルート値を抽出する必要があります。これを行うコードは次のとおりです。
public class LegacyHandler:MvcHandler
{
private RequestContext requestContext;
public LegacyHandler(RequestContext requestContext) : base(requestContext)
{
this.requestContext = requestContext;
}
protected override void ProcessRequest(HttpContextBase httpContext)
{
string redirectActionName = ((LegacyRoute) RequestContext.RouteData.Route).RedirectActionName;
var queryString = requestContext.HttpContext.Request.QueryString;
foreach (var key in queryString.AllKeys)
{
requestContext.RouteData.Values.Add(key, queryString[key]);
}
VirtualPathData path = RouteTable.Routes.GetVirtualPath(requestContext, redirectActionName,
requestContext.RouteData.Values);
httpContext.Response.Status = "301 Moved Permanently";
httpContext.Response.AppendHeader("Location", path.VirtualPath);
}
}
2- int タイプの id パラメータを受け入れる ViewArtist アクションを持つ ArtistController がある RouteTable に、これら 2 つのルートを追加する必要があります。
routes.Add("Legacy", new LegacyRoute("Artists/ViewArtist.aspx", "Artist", new LegacyRouteHandler()));
routes.MapRoute("Artist", "Artist/ViewArtist/{id}", new
{
controller = "Artist",
action = "ViewArtist",
});
/Artists/ViewArtist.aspx?id=123 のような URL に移動できます。
/Artist/ViewArtist/123 にリダイレクトされます。