我有3个域名都指向同一个MVC2应用程序。我现在所拥有的是作为交通警察的家庭控制器,并重定向到控制器和特定主机名的视图。但我不喜欢这导致的URI结果......
例如: www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery
我更愿意:
www.webhost1.com/imagegallery
有没有办法在global.asax中定义路由,在路由评估中包含主机名,以便URI看起来不那么多余?
答案 0 :(得分:5)
您需要创建自定义路线约束。 这是我快速做的那个:
public class hostnameConstraint : IRouteConstraint
{
protected string _hostname;
public hostnameConstraint (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(
"ImageGallery", "{controller}/{action}",
new { controller = "Home", action = "Index"},
new { hostname = new hostnameConstraint("webhost1.com") }
);
routes.MapRoute(
"ImageGallery", "{controller}/{action}",
new { controller = "Home", action = "Index"},
new { hostname = new hostnameConstraint("webhost2.com") }
);
依此类推。我不知道你的路线是如何布局的,但重点是现在你可以为主机名分别设置路线。哪个可以让你做你想做的事。