2017-09-07 1 views
0

Je convertis un projet de type site Web asp.net webforms en une application Web asp.net mvc. Je veux garder tous les changements au minimum.Re-mappage de dossiers dans une application Web asp.net

Les pages et ses sous-dossiers se trouvent tout en haut du dossier du projet et sont au nombre de centaines.

Maintenant, dans la nouvelle application Web, je veux les déplacer vers un sous-dossier, appelons-le WebForms.

Existe-t-il un moyen au moment de l'exécution d'exécuter les pages telles qu'elles étaient précédemment exécutées, c'est-à-dire à la racine du dossier de l'application? J'ai eu: http://localhost:54321/Page1.aspx. Page1.aspx a été stocké dans le dossier racine du projet de site Web.

Dans la nouvelle structure de projet que je le disque:

<project folder> 
    WebForms 
     Page1.aspx 

Cela fonctionne: http://localhost:54321/WebForms/Page1.aspx, mais je veux la carte en quelque sorte à http://localhost:54321/Page1.aspx.

Est-ce faisable? J'utilise IIS Express pour le développement et IIS 7.5 pour le déploiement de test/production. Je veux éviter d'avoir à changer l'image et d'autres URLs de contenu - comme vous pouvez l'imaginer, déplacer les pages dans le sous-dossier brise certaines d'entre elles.

Merci

Répondre

1

Si vous voulez juste la carte à toutes les demandes /something.aspx donc ils vont plutôt WebForms\something.aspx, vous pouvez probablement utiliser la règle de l'itinéraire ci-dessous.

routes.MapPageRoute(
    "Other Web Pages", 
    "{pagename}.aspx", 
    "~/WebForms/{pagename}.aspx"); 

Alternativement, si vous avez besoin des scénarios plus avancés, vous pouvez utiliser une classe personnalisée qui dérive de RouteBase et d'utiliser un RegEx pour correspondre et carte de la route, similaire à this question's answer

public class WebFormsRoute : RouteBase 
{ 
     Regex re = new Regex(@"^/(?<page>\w+)\.aspx", RegexOptions.IgnoreCase); 

     public override RouteData GetRouteData(HttpContextBase httpContext) 
     { 
     var data = new RouteData(); 


     var url = httpContext.Request.FilePath; 

     if (!re.IsMatch(url)) 
     { 
      return null; 
     } 

     var m = re.Match(url); 

     data.RouteHandler = new PageRouteHandler("~/WebForms/" + m.Groups["page"].Value + ".aspx"); 

     return data; 
     } 

} 

Et puis ajoutez-le à votre collection de routes au RouteConfig

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


    routes.Add(new WebFormsRoute()); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
    } 

}