我有一段时间需要在我的asp.net mvc项目中支持以下url.
http://www.example.com/d.aspx?did=1234
我需要将此映射到此URL.
http://www.example.com/dispute/Detail/1234
我已经查看了以下信息.
http://blog.eworldui.net/post/2008/04/ASPNET-MVC—Legacy-Url-Routing.aspx
ASP.Net MVC routing legacy URLs passing querystring Ids to controller actions
在尝试遵循这一点时,我可以获得第一个工作网址,但之后所有其他网址都被破坏了.谁能看到我出错的地方?
这是我的路线.
public static void RegisterRoutes(RouteCollection routes) { // all my other routes // Legacy routes routes.Add( "Legacy",new LegacyRoute( "d.aspx","LegacyDirectdispute",new LegacyRouteHandler()) ); routes.MapRoute( "LegacyDirectdispute","dispute/Details/{id}",new { controller = "dispute",action = "Details",id = "" } ); routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = "" } // Parameter defaults ); }
这是我正在使用的global.asax.cs中的代码.
public class LegacyRoute : Route { public string RedirectActionName { get; set; } public LegacyRoute(string url,string redirectActionName,IRouteHandler routeHandler) : base(url,routeHandler) { RedirectActionName = redirectActionName; } } // The legacy route handler,used for getting the HttpHandler for the request public class LegacyRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { return new LegacyHandler(requestContext); } } // The legacy HttpHandler that handles the request 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) { if (key.Equals("did")) { requestContext.RouteData.Values.Add("id",queryString["did"]); } else { requestContext.RouteData.Values.Add(key,queryString[key]); } } VirtualPathData path = RouteTable.Routes.GetVirtualPath(requestContext,redirectActionName,requestContext.RouteData.Values); if (path != null) { httpContext.Response.Status = "301 Moved Permanently"; httpContext.Response.AppendHeader("Location",path.VirtualPath); } } }
解决方法
原文地址:https://www.jb51.cc/csharp/101067.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。