【发布时间】:2009-11-04 02:39:03
【问题描述】:
我有一个使用 MVC 2 Preview 2 的 Web 应用程序,并且在注册了所有路由之后,我需要将每个路由包装在一个装饰器中,使其更进一步。问题是,这样做会破坏路由。最终发生的是 GetVirtualPath 方法将错误地匹配应用程序中的其他区域(我使用的是单项目区域)。装饰器是否做了任何有用的事情都没有关系。只需使用以下 passthrough 即可破解它。
public class RouteDecorator: RouteBase
{
readonly RouteBase _route;
public RouteDecorator(RouteBase route)
{
_route = route;
}
public override RouteData GetRouteData(HttpContextBase context)
{
return _route.GetRouteData(context);
}
public override VirtualPathData GetVirtualPath(RequestContext context, RouteValueDictionary values)
{
return _route.GetVirtualPath(context, values);
}
}
在注册所有路由后,我在一个简单的循环中分配装饰器。
var routes = RouteTable.Routes;
for (var i = 0; i < routes.Count; i++)
{
routes[i] = new RouteDecorator(routes[i]);
}
如何在不破坏路线和区域的情况下安全地插入装饰器?
我有一个可用的复制解决方案to download here。在复制中,路由装饰器被注释掉了。重新评论它会破坏路由,并且第一个虚拟区域的路由数据将匹配通常仅正确匹配相应命名空间的链接。
【问题讨论】:
标签: asp.net asp.net-mvc routing