我有3个域名都指向同一个MVC2应用程序.我现在所拥有的是作为交通警察的家庭控制器,并重定向到控制器和特定主机名的视图.但我不喜欢这导致的URI结果......
例如:www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery
我更喜欢:
www.webhost1.com/imagegallery
有没有办法在global.asax中定义路由,包括路由评估中的主机名,以便URI看起来不那么多余?
小智 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您只需将其添加到路由中,并指定要将路由应用于哪个主机名.像这样:
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") }
);
Run Code Online (Sandbox Code Playgroud)
等等等等.我不知道你的路线是如何布局的,但重点是现在你可以为主机名分别设置路线.哪个可以让你做你想做的事.
归档时间: |
|
查看次数: |
1340 次 |
最近记录: |