Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用MVC3路由子域_Asp.net_Asp.net Mvc 3_Iis 7_Asp.net Mvc Routing - Fatal编程技术网

Asp.net 使用MVC3路由子域

Asp.net 使用MVC3路由子域,asp.net,asp.net-mvc-3,iis-7,asp.net-mvc-routing,Asp.net,Asp.net Mvc 3,Iis 7,Asp.net Mvc Routing,我想为我的一些客户创建一项服务,使他们能够在我创建的MVC3网站上拥有自己的网页 我希望企业能够有一个类似www.BusinessName.mydomain.com的url 是否可以在MVC3中创建一条允许我这样做的路由 谢谢你的帮助 好吧,我想我已经走得更远了 理想情况下,我希望能够在IIS中为子域使用通配符,但从我所做的研究来看,这似乎是不可能的 我已手动将www.mycompany.mydomain.com添加到IIS中,并更新了my global.ascx以包含此内容 public

我想为我的一些客户创建一项服务,使他们能够在我创建的MVC3网站上拥有自己的网页

我希望企业能够有一个类似www.BusinessName.mydomain.com的url

是否可以在MVC3中创建一条允许我这样做的路由

谢谢你的帮助

好吧,我想我已经走得更远了

理想情况下,我希望能够在IIS中为子域使用通配符,但从我所做的研究来看,这似乎是不可能的

我已手动将www.mycompany.mydomain.com添加到IIS中,并更新了my 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并加载正确的控制器

我现在有两个问题

如果我浏览www.mission.mydomain.com,我会得到一个502错误。如果找不到www.mission.mydomain.com,我可以在IIS中如何重定向到www.mydomain.com


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

我建议使用稍微不同的方法-唯一需要注意的是,此网站必须是IIS上唯一的网站。因为IIS不支持通配符主机头,所以它必须是默认网站

这样,您将把所有请求(包括www.mission.mydomain.com)送到应用程序的前门,并且您可以适当地处理它们

在MVC应用程序中,不要对子域使用路由,请使用应用程序_BeginRequest。在这里,您可以处理Request.Headers[“HOST”]并将它们发送到您想要的地方


在我看来,路由是用来在用户到达站点时路由用户,而不是决定用户访问哪个站点…

我建议一种稍微不同的方法-唯一需要注意的是,此网站必须是IIS上唯一的网站。因为IIS不支持通配符主机头,所以它必须是默认网站

这样,您将把所有请求(包括www.mission.mydomain.com)送到应用程序的前门,并且您可以适当地处理它们

在MVC应用程序中,不要对子域使用路由,请使用应用程序_BeginRequest。在这里,您可以处理Request.Headers[“HOST”]并将它们发送到您想要的地方


在我看来,路由是指当用户到达站点时用于路由用户,而不是决定哪个站点用户正在访问…

谢谢Vnuk。我确实有几个其他网站在同一个盒子上运行。否则你的建议就有意义了。我确实有几个其他网站在同一个盒子上运行。否则你的建议就有意义了