Tengo la siguiente URL Necesito ayuda en mi proyecto asp.net mvc por un tiempo.enrutamiento enlaces legacy asp.net en un proyecto asp.net mvc
http://www.example.com/d.aspx?did=1234
Necesito asignar esto a esta url.
http://www.example.com/Dispute/Detail/1234
Ya he visto la siguiente información.
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
Al tratar de seguir este puedo conseguir el primer url para trabajar, pero luego se rota de todas las demás URL. ¿Alguien puede ver dónde he salido mal?
Aquí están mis rutas.
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
);
}
Aquí hay un código en mi global.asax.cs que estoy usando.
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);
}
}
}
contestadas aquí: http://stackoverflow.com/questions/817325/asp-net-mvc-routing-legacy-urls-passing-querystring-ids-to-controller-actions/818370 # 818370 –
@ marwan-auida Por favor, lea el contenido de la pregunta. Ya he visto y leído esa pregunta SO e incluso tengo un enlace a ella en mi pregunta. – MHinton
Lo que quiero decir con la ruptura de mi URL es antes de agregar el código de LegacyRouteHandler. Tenía vínculos como http://www.example.com/News y ahora aparecen en http://www.example.com/d.aspx. acción = Índice y controlador = Noticias. – MHinton