2010-06-17 6 views
0

J'ai un Web Forms ASP.NET application dans le processus de migration vers ASP.NET MVC 1. urls sont les suivantes:UrlRewriting de ASP.NET WebApplication à ASP.NET MVC WebApplication

hxxp: // domaine /Default.aspx (WebForms)

hxxp: // domain/mvc/contrôleur/action (MVC)

(hxxp parce stackoverflow pense qu'ils sont des liens et me empêche de poster tant)

"Mvc" est une autre application à l'intérieur de mon site Web dans IIS

J'ai besoin maintenant d'être en mesure de le faire:

hxxp: // domain/SubsiteName /Default.aspx (WebForms) hxxp: // domain/SubsiteName/mvc/Contrôleur/Action (MVC)

Où 'sous-site' peut être n'importe quoi et doit être vérifié en cours de fonctionnement. Je ne peux pas créer de répertoires pour chaque sous-siteName.

Je pensais à UrlRewriting, donc/sous-site/* réécrit à/*, mais alors je devrais réécrire à partir de WebForms à MVC.

Je ne peux pas imaginer un moyen de faire une demande à hxxp: // domain/SubsiteName/mvc/ jamais être prises par l'application MVC dans ce scénario.

Des idées?

Répondre

0

Voici comment vous écrivez ce qui suit dans le Managed Fusion URL Rewriter, qui utilise la syntaxe mod_rewrite Apache:

J'ai besoin maintenant d'être en mesure de le faire: hxxp: // domain/SubsiteName/défaut. ASPX (WebForms) hxxp: // domain/SubsiteName/mvc/contrôleur/action (MVC)

RewriteRule /(.*)/Default.aspx /$1/mvc/Controller/Action 

Cependant, je suppose que vous ne avez pas déjà h ave tous vos répertoires définis comme ceci, donc vous avez besoin d'un moyen de dire à MVC que le subsiteName est un paramètre ou vos méthodes. Donc ce que vous feriez dans vos itinéraires est la suivante:

routes.MapRoute(
    "Default", 
    "/{siteName}/mvc/{controller}/{action}", 
    new { controller = "Home, action = Index } 
); 

Cela prendra le chemin de réécriture et de fusion dans le HomeController standard. Ensuite, pour dire l'action Index vous auriez quelque chose comme ceci:

public ActionResult Index (string siteName) { ... } 

Et puis juste poignée siteName d'une manière spéciale. Évidemment, il s'agit d'un exemple simplifié de la façon dont vous pouvez gérer cela, mais si vous le souhaitez, vous pouvez également gérer cela avec un moteur de vue personnalisé, qui achemine vers différents modèles en fonction du nom du site.Ou vous pouvez tirer siteName hors de la variable routes si vous ne voulez pas l'avoir sur toutes les méthodes. Fondamentalement, après que vous avez la configuration ci-dessus, si c'est vraiment la structure que vous voulez, il y a de nombreuses façons de gérer cela, il vous suffit de trouver celui qui est le plus facilement utilisé par votre code actuel.

+0

En fait, ce que je avais besoin était de faire hxxp: // domain/SubsiteName/mvc/Contrôleur/Action récrire à hxxp: // domain/mvc/contrôleur/Action Je pense que je l'ai mentionné que le 'MVC' était une application dans le même WebSite hébergeant l'application WebForms, afin de partager des fichiers web.config. J'ai trouvé que Managed Fusion n'a pas pris les URL MVC. Il enregistre uniquement les accès à * .aspx, peut-être parce qu'il s'agit d'une solution de domaine d'application. J'ai résolu mon problème avec le module Helios ISAPI_Rewrite. Malheureusement, ce n'est pas open source et la version Lite ne supporte pas le déploiement manuel. Merci pour l'aide man. – Fauna

Questions connexes