2011-08-05 76 views
2

我想为我的一些客户创建一项服务,这将允许他们在我创建的MVC3网站上拥有自己的网页。使用MVC3路由子域名

我想一个企业要能够有一个网址,看起来像www.BusinessName.mydomain.com

是否有可能创造MVC3内的路线,让我做到这一点?

感谢您的帮助

好了,所以我想我已经进一步得到了一点。

理想情况下,我希望能够在IIS中的子域具有通配符,但从我做的研究看来,这是不可能的。

我手动添加www.mycompany.mydomain.com到IIS并更新了global.ascx包含此

public class SubDomainRoute : RouteBase 
    { 

     public override RouteData GetRouteData(HttpContextBase httpContext) 
     { 
      var url = httpContext.Request.Headers["HOST"]; 

      var subDomain = Helpers.Helpers.GetSubDomain(url); 
      if (subDomain==null) 
       return null; 
      var routeData = new RouteData(this, new MvcRouteHandler()); 

      switch (subDomain) 
      { 
       case "mycompany": 
        routeData.Values.Add("controller", "SubDomain"); 
        routeData.Values.Add("action", "Index"); 
        break; 
       default: 
        routeData.Values.Add("controller", "Home"); 
        routeData.Values.Add("action", "Index"); 
        break; 
      } 

      return routeData; 
     } 

     public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
     { 
      return null; 
     } 
    } 

所以,现在我可以浏览www.mycompanyname.mydomain.com和正确的控制器加载。

我现在有2个问题。

如果我浏览到www.mistake.mydomain.com,我得到一个502错误。如果www.mistake.mydomain.com找不到,我可以在IIS中做什么以重定向到www.mydomain.com?

一旦我浏览了www.mycompanyname.mydomain.com,我的主菜单中的所有链接现在都指向例如www.mycompanyname.mydomain.com/contactus这是错误的,我如何确保菜单项不使用url中的子域名?

回答

0

我会建议一个稍微不同的方法 - 唯一需要注意的是该网站必须是IIS上唯一的网站。由于IIS不支持通配符主机头,它必须是默认网站。

通过这种方式,您将获得所有请求(包括www.mistake.mydomain.com)到您的应用程序的前门,并且您可以适当地处理它们。

在你的MVC应用程序中,不要使用路由子域名,使用Application_BeginRequest。在那里,你需要做什么与Request.Headers [“HOST”]并将它们发送到你想要的地方。

我看到它的方式,途径是为了用于路由的用户,当他到达现场,而不是决定哪些网站用户访问...

+0

感谢Vnuk。我确实有一些其他网站在同一个盒子上运行。否则,你的建议是有道理的 –