使用MVC3路由子域

时间:2011-08-05 06:55:01

标签: asp.net asp.net-mvc-3 iis-7 asp.net-mvc-routing

我想为我的一些客户创建一项服务,让他们在我建立的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这是错误的,我如何确保菜单项不使用网址中的子域?

1 个答案:

答案 0 :(得分:0)

我建议采用略有不同的方法 - 唯一需要注意的是,此网站必须是IIS上唯一的网站。由于IIS不支持通配符主机标头,因此它必须是默认网站。

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

在您的MVC应用程序中,不要对子域使用路由,请使用Application_BeginRequest。在那里,您可以使用Request.Headers [“HOST”]执行操作,并将它们发送到您想要的位置。

我看到它的方式,路由用于在用户访问网站时路由用户,而不是决定访问哪个网站用户...