2010-11-18 10 views
1

Ich habe 3 Domain-Namen alle auf die gleiche MVC2-Anwendung hingewiesen. Was ich jetzt habe, ist der Homecontroller, der als Verkehrspolizist fungiert und auf Controller und Sichten für den spezifischen Hostnamen umleitet. Aber Ich mag nicht den URI Ergebnis führt dies ...Wie kann der Hostname in die MVC2-Routenkarte aufgenommen werden?

ex: www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery

ich lieber haben :

www.webhost1.com/imagegallery

gibt es eine Möglichkeit, die Routen in global.asax zu definieren, die den Hostnamen in der Routing-Bewertung umfassen würde, so dass die URI redundante sieht weniger?

Antwort

5

Aha!, Es dauerte ein bisschen fiedeln (und ein Höhepunkt in und altes Buch), aber ich denke, ich habe es gelöst.

Sie müssen eine benutzerdefinierte Routenbeschränkung erstellen. Dies ist diejenige, die ich schnell gemacht:

public class hostnameConstraint : IRouteConstraint 
    { 
     protected string _hostname; 

     public hostnameConstraint (string hostname) 
     { 
      _hostname = hostname; 
     } 

     bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
     { 
      if (httpContext.Request.Url.Host == _hostname) 
       return true; 
      return false; 
     } 
    } 

Dann fügen Sie einfach auf Ihre Routen und geben Sie die Hostname Sie die Route anwenden möchten. wie folgt:

routes.MapRoute(
      "ImageGallery", "{controller}/{action}", 
      new { controller = "Home", action = "Index"}, 
      new { hostname = new hostnameConstraint("webhost1.com") } 
     ); 

routes.MapRoute(
      "ImageGallery", "{controller}/{action}", 
      new { controller = "Home", action = "Index"}, 
      new { hostname = new hostnameConstraint("webhost2.com") } 
     ); 

und so weiter und so fort. Ich weiß nicht, wie deine Routen angelegt sind, aber der Punkt ist, dass du jetzt separate Routen für die Hostnamen haben kannst. Was Ihnen ermöglichen sollte, das zu tun, wonach Sie suchen.

+0

Sie sind mein Held! Ich habe das gerade getestet und es funktioniert perfekt. –

+0

Das ist großartig. Genau das, wonach ich gesucht habe. Ich erstelle eine Site, auf der Domain-Weiterleitungen gehostet werden können. Ich wollte, dass die Seite die Domains verwaltet und die Weiterleitung ist. Das Hinzufügen einer Route mit dieser Einschränkung erlaubte mir, die normale Site unter der Host-Domain zu haben, und alle anderen Domains würden entsprechend umgeleitet werden. Vielen Dank! –

Verwandte Themen