gpt4 book ai didi

asp.net-mvc - ASP.Net MVC 路由旧 URL,将查询字符串 Id 传递给 Controller ​​操作

转载 作者:行者123 更新时间:2023-12-05 00:43:39 24 4
gpt4 key购买 nike

我们目前在 IIS6 上运行,但希望尽快迁移到 IIS 7。

我们正在将现有的 Web 表单站点迁移到 ASP.Net MVC。我们有很多遗留页面需要重定向到新的 Controller 。我看到了这篇看起来很有趣的文章:
http://blog.eworldui.net/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx

所以我想我可以编写自己的路由处理程序,或者在 Controller 中进行重定向。后者略有气味。

但是,我不太确定如何处理来自旧 url 的查询字符串值,理想情况下我需要将其传递给我的 Controller 的 Show() 方法。例如:

旧版网址:

/Artists/ViewArtist.aspx?Id=4589



我希望它映射到:

ArtistsController Show action



实际上,我的 Show 操作采用了艺术家姓名,因此我确实希望将用户从 Legacy URL 重定向到/artists/Madonna

谢谢!

最佳答案

根据您提到的文章,这些是完成此操作的步骤:

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-您必须将这两条路由添加到 RouteTable,其中您有一个 ArtistController 和 ViewArtist Action ,接受 int 类型的 id 参数
    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

你将被重定向到:/Artist/ViewArtist/123

关于asp.net-mvc - ASP.Net MVC 路由旧 URL,将查询字符串 Id 传递给 Controller ​​操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com