我期待创建一个MVC3网站。我们至少需要两个区域,但每个区域都需要不同的网址。就像这样:mvc3区域有主机名
domain.com/进入/
admin.domain.com/进入/区域/管理
anotherSite.com/进入/区域/门户
之后做一些研究,我发现Lucero's link,您可以使用HostNameContraint如下:
public class HostNameContraint : IRouteConstraint
{
protected string _hostname;
public HostNameContraint(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;
}
}
个
然后注册这样的约束:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { hostname = new HostNameContraint("domain.com") },
new[] { "MVCProject.Controllers" }
);
routes.MapRoute(
"Admin_Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "Admin", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { hostname = new HostNameContraint("admin.domain.com") },
new[] { "MVCProject.Controllers.Areas.Admin.Controllers" }
);
routes.MapRoute(
"Portal_Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "Portal", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { hostname = new HostNameContraint("anotherSite.com") },
new[] { "MVCProject.Controllers.Areas.Portal.Controllers" }
);
我有IIS设置,使它们指向了每个站点的应用程序的根文件夹中。指向根“Domain.com”的工作正常,但去“Admin.domain.com”或“Domain.com/admin/”出现404“资源无法找到。”
更新 我已经尝试过它与区域名称在URL的开始和没有。
“门户网站/ {控制器}/{行动}/{ID}”
的问题是,当“门户”区域是在路由,签名不匹配名称“anotherSite.com”,因此它回来说403.14 - 禁止。无法列出此目录的内容。同样重要的是要注意,当“Portal”区域是url参数时,HostNameConstraint的构造函数永远不会被调用。
是的,我已经试过它在开始和没有区域名称。 IE''Portal/{controller}/{action}/{id}“,//带参数的URL'问题是当路由中的”Portal“区域与名称”anotherSite.com“不匹配时应直接指向“Portal”区域,因此“anotherSite.com”与“Portal/{controller}/{action}/{id}”不匹配,//带参数' –