我的 MVC3 网站中有以下路由定义:
routes.MapRoute(
"FB", // Route name
"fb/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
).RouteHandler = new RH();
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我的自定义“RH”处理程序的代码是
public class RH : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
//here I store somewhere that 'fb' prefix is used, so logic is different in some places
return base.GetHttpHandler(requestContext);
}
}
我想要实现的是,当使用“fb”子路径前缀访问我的网站时,我的网站逻辑执行方式会有所不同。
问题是,当我正常访问我的网站时(例如http://localhost),然后当我执行
Url.Action('action' 'controller')
,则输出为“http://localhost/fb/controller/action”。
我想实现的是,当我的网站使用 'fb' 前缀子路径访问时,我的 Url.Action 调用输出 /fb/controller/action 路径,如果我正常访问网站(没有 'fb' 前缀子路径),那么Url.Action 调用输出 /controller/action
最主要的是,/fb/controller/actions 必须路由到与通过 /controller/action 格式访问站点时相同的控制器/动作。
当我使用“fb”前缀时,只需要“fb”路由来存储一些临时信息。