2010-07-27 4 views
4

Je travaille sur la migration d'un site Web ASP.NET existant vers un projet MVC. Il y a plusieurs (60+) pages que je ne veux pas réécrire tout de suite, et je me demande s'il y a une façon que je peux:Caractères génériques avec ASP.NET MVC MapPageRoute pour prendre en charge l'organisation du code existant

  • Déplacer les pages .aspx existantes (à la fois le balisage et le code fichiers -behind) dans un dossier 'Legacy' dans ma structure MVC
  • configurons le routage donc un appel à /foo.aspx (sans 'héritage') se fait appeler ~/Legacy/foo.aspx

Effectivement, je ne veux pas de "héritage" dans l'URL, mais je ne veux pas non plus que la solution MVC soit pleine de pages .aspx héritées. J'accepte que c'est un point très mineur, je suis juste curieux de savoir si cela peut être fait avec Routing.

Je me rends compte que je pouvais faire:

routes.MapPageRoute("legacy-foo", "Foo.aspx", "~/Legacy/Foo.aspx"); 

mais je me demande s'il y a une façon de le faire dynamiquement (en utilisant les routes MVC)? par exemple:

routes.MapPageRoute("legacyroutes", "{filename}.aspx", "~/Legacy/{filename}.aspx"); 

Je suppose que d'une façon est d'utiliser un module de rewriter URL, mais cela semble un peu redondant si les routes est en mesure de le faire en mode natif.

Répondre

1

Je ne sais pas si vous avez encore besoin, mais vous pouvez résoudre ce avec une solution sale:

Utilisez HttpContext.Current.Request.MapPath("") pour obtenir l'emplacement physique l'itinéraire, puis boucle sur tous les fichiers ASPX (et toute autre chose que vous souhaitez mapper) en utilisant les classes. Vous pouvez ensuite enregistrer dynamiquement des chemins alternatifs pour vos fichiers.

J'ai fait un prototype et il semble fonctionner, bien que, bien sûr, le diable est toujours dans les détails.

Cheers,

1

Je résolus cela en utilisant un contrôleur qui retourne le contenu du fichier. Ce n'est pas une solution parfaite et rapide, mais cela fonctionne.

routes.MapRoute(
    "legacyroutes", 
    "{filename}.aspx", 
    new { controller = "Home", action = "RedirectFile"} 
); 

et le contrôleur:

public class HomeController : Controller 
{ 
    public ActionResult RedirectFile(string filename) 
    { 
     string url = Url.Content("~/Legacy/"+filename+".aspx"); 
     Redirect(url); // or other code to process the file 
    } 
} 

Détails et autres exemples ici: http://maxivak.com/dynamic-url-rewriting-on-asp-net-mvc/

Questions connexes