我想为我的一些客户创建一项服务,让他们在我建立的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这是错误的,我如何确保菜单项不使用网址中的子域?
答案 0 :(得分:0)
我建议采用略有不同的方法 - 唯一需要注意的是,此网站必须是IIS上唯一的网站。由于IIS不支持通配符主机标头,因此它必须是默认网站。
这样,您将获得所有请求(包括www.mistake.mydomain.com)到您应用程序的前门,您可以适当地处理它们。
在您的MVC应用程序中,不要对子域使用路由,请使用Application_BeginRequest。在那里,您可以使用Request.Headers [“HOST”]执行操作,并将它们发送到您想要的位置。
我看到它的方式,路由用于在用户访问网站时路由用户,而不是决定访问哪个网站用户...