Asp.net mvc 2 如何将主机名包括在MVC2路由映射中?
我有3个域名都指向同一个MVC2应用程序。我现在得到的是homecontroller充当交通警察,并重定向到控制器和视图以获取特定主机名。但我不喜欢这导致的URI结果 例: www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery 我想要: www.webhost1.com/imagegalleryAsp.net mvc 2 如何将主机名包括在MVC2路由映射中?,asp.net-mvc-2,Asp.net Mvc 2,我有3个域名都指向同一个MVC2应用程序。我现在得到的是homecontroller充当交通警察,并重定向到控制器和视图以获取特定主机名。但我不喜欢这导致的URI结果 例: www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery 我想要: www.webhost1.com/imagegallery 是否有办法在global.asax中定义路由,将主机名包括在路由评估中,以便URI看起来不那么冗余?
是否有办法在global.asax中定义路由,将主机名包括在路由评估中,以便URI看起来不那么冗余?Aha!,这需要一点修改(和一个高峰在和旧的书),但我认为我已经解决了它 您需要创建自定义管线约束。 这是我快速制作的:
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") }
);
等等等等。我不知道您的路由是如何布置的,但关键是现在您可以为主机名设置单独的路由。这应该能让你做你想做的事。啊哈!,这需要一点修改(和一个高峰在和旧的书),但我认为我已经解决了它 您需要创建自定义管线约束。 这是我快速制作的:
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") }
);
等等等等。我不知道您的路由是如何布置的,但关键是现在您可以为主机名设置单独的路由。这应该能让你做你想做的事。先生,你是我的英雄!我刚刚测试了这个,它工作得很好。这太棒了。正是我要找的。我正在创建一个网站,我们可以主机域重定向。我希望该网站管理域以及重定向。添加具有此约束的路由允许我将正常站点置于主机域下,并且任何其他域都将相应重定向。谢谢先生,你是我的英雄!我刚刚测试了这个,它工作得很好。这太棒了。正是我要找的。我正在创建一个网站,我们可以主机域重定向。我希望该网站管理域以及重定向。添加具有此约束的路由允许我将正常站点置于主机域下,并且任何其他域都将相应重定向。谢谢