加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.Net MVC路由遗传URL将查询字符串ID传递给控

发布时间:2020-12-16 06:41:45 所属栏目:asp.Net 来源:网络整理
导读:我们目前正在IIS6上运行,但希望尽快转移到IIS 7. 我们正在将现有的Web表单站点移动到ASP.Net MVC.我们有很多传统页面需要重定向到新控制器.我看到这篇看起来很有趣的文章: http://blog.eworldui.net/post/2008/04/ASPNET-MVC—Legacy-Url-Routing.aspx 所以
我们目前正在IIS6上运行,但希望尽快转移到IIS 7.

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

所以我想我可以编写自己的路由处理程序,或者在控制器中进行重定向.后者略微闻起来.

但是,我不太确定如何处理遗留URL中的查询字符串值,理想情况下我需要传递给我的控制器的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,在那里你有一个带有ViewArtist动作的ArtistController接受一个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读