7
votes

Routage des liens ASP.NET Legacy dans un projet ASP.NET MVC

J'ai l'URL suivante, j'ai besoin de prendre en charge mon projet ASP.NET MVC pendant un moment.

 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);
   }
  }
 }


3 commentaires

Répondu ici: Stackoverflow.com/questions/817325/...


@ Marwan-Auida Veuillez lire le contenu de la question. J'ai déjà vu et lisez cela alors question et je me suis même un lien avec ma question.


Ce que je veux dire par mon URL est cassé, c'est avant que j'ajoute le code LegacacyRouteHandler, j'ai eu des liens comme exemple.com/news " A> Et maintenant ils viennent exemple.com/d.aspx?Action=index&Controller = Actualités .


3 Réponses :


4
votes

Vous pouvez simplement créer un fichier appelé d.aspx dans votre racine de votre site avec des contenus similaires à ceux suivants:

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
    Response.Redirect(string.Format("http://{0}/Dispute/Detail/{1}", Request.Url.Host, Request.QueryString.Get("did")));
}
</script>


2 commentaires

@grenade J'aime c'est la réponse la plus simple que j'ai vue à ce problème.


Comme cela est aussi à des fins de référencement, je recommande la méthode redirectpermanent. MSDN.MICROSSOFT.COM/EN-US/LIBRAY/ ...



2
votes

Voici ce que j'ai fini par faire pour résoudre mon problème jusqu'à ce que je connaisse la réponse simple @grenade posté. J'ai trouvé cette technique ici ici http: // www .MikesDotNetting.com / Article / 108 / Handling-héritage-URL-with-asp.net-mvc . xxx


0 commentaires

0
votes

Que diriez-vous d'ajouter une page de carte Route: xxx

puis en l'utilisant dans votre aspx / vue xxx


0 commentaires