2017-07-21 1 views
0

Cela peut sembler étrange. J'espère que deux instances identiques d'une application se comporteront différemment en fonction de l'URL utilisée pour y accéder. J'ai deux instances de l'application déployée sur IIS, appelons leurs chemins dev.routeone et dev.routetwo. Les deux instances pointent vers la même source. Maintenant, disons que j'ai deux actions dans mon MainController dans ce projet, ActionOne et ActionTwo, reliant respectivement aux vues HTML viewone.cshtml et viewtwo.cshtml respectivement.Modification du comportement de l'application en fonction de l'URL complète

La configuration de routage serait mis en place quelque chose comme ça (en RegisterRoutes):

routes.MapRoute(
    name: "ActionOne", 
    url: "one", 
    defaults: new { controller = "MainController", action = "ActionOne" } 
); 

routes.MapRoute(
    name: "ActionTwo", 
    url: "two", 
    defaults: new { controller = "MainController", action = "ActionTwo" } 
); 

Avec cette configuration, les deux IIS instances se comportent de manière identique:

http://dev.routeone/one -> ActionOne 
http://dev.routeone/two -> ActionTwo 

http://dev.routetwo/one -> ActionOne 
http://dev.routetwo/two -> ActionTwo 

Je veux avoir une situation où , en utilisant le même code source, l'URL indiquera quelle action est exécutée lorsqu'un itinéraire est entré. Plus précisément, dans ce cas, dev.routeone diriger les deux voies à ActionOne et le contraire avec dev.routetwo:

http://dev.routeone/one -> ActionOne 
http://dev.routeone/two -> ActionOne 

http://dev.routetwo/one -> ActionTwo 
http://dev.routetwo/two -> ActionTwo 

Ou mieux encore, directement de façon appropriée sans les routes configurées:

http://dev.routeone/ -> ActionOne 
http://dev.routetwo/ -> ActionTwo 

Je ne sais pas si cela est possible ou souhaitable, mais je suis ouvert à toutes les solutions. Existe-t-il un moyen de «regarder en arrière» sur l'URL qui n'est pas contrôlée par l'application et de l'utiliser pour déterminer le comportement?

+0

Vous souhaitez utiliser plusieurs applications avec des chemins de base différents, mais avec les mêmes chemins relatifs? –

+0

Fondamentalement, oui. Bien que les applications multiples ont le même code source –

+0

Peut-être que cela? https://stackoverflow.com/questions/28644293/domain-routing-in-mvc5 –

Répondre

0

Voyant que je connaissais les deux URL qui allaient être accéder au site, j'étais capable de faire cela (notez la mise en forme légèrement différente, comme je l'ai depuis introduit un ID param aux actions):

var appID = System.Web.Hosting.HostingEnvironment.ApplicationID; 

if (appID.Contains("routeone") 
{ 
    routes.MapRoute(
     name: "ActionOne", 
     url: "{id}", 
     defaults: new { controller = "MainController", action = "ActionOne", id = UrlParameter.Optional } 
    ); 
} 

if (appID.Contains("routetwo") 
{ 
    routes.MapRoute(
     name: "ActionTwo", 
     url: "{id}", 
     defaults: new { controller = "MainController", action = "ActionTwo", id = UrlParameter.Optional } 
    ); 
} 

ce format n'est pas dynamique, mais peut être étendu à traiter plus de cas de complexité croissante.

0

Lors de l'ajout d'un site Web il suffit de spécifier le même chemin physique et utiliser différents noms d'hôte sur cet écran:

enter image description here

+0

Vous vous méprenez. J'ai fait ceci, pour créer les itinéraires séparés, mais les deux applications se comportent de manière identique. J'espère accéder aux applications en utilisant différents noms d'hôtes (comme vous l'avez décrit) mais je veux qu'ils effectuent différentes actions en fonction de celles auxquelles on accède sans avoir à écrire deux sites Web distincts. –