在我的网络应用程序“子网站”中,页面即时创建。每当创建新子网站时,或者(有时)创建新页面时,路径都会添加RouteTable.Routes
。像这样:
public static Site RegisterSite(Site site) {
DeregisterSite(site);
// Register non-auto-routed pages first so the default route doesn't override them.
foreach (SitePage page in site.SitePages.Where(o => !o.IsAutoRouted))
RegisterPageRoute(site, page);
RegisterDefaultRoute(site);
return site;
}
// Both RegisterPageRoute and RegisterDefaultRoute eventually make it here...
private static Route RegisterRoute(int siteId, string routeName, Route route) {
using (RouteTable.Routes.GetWriteLock()) {
RouteTable.Routes.Add(routeName, route);
}
return route;
}
我已经调试了新网站的创建,并且在创建网站时,路由已正确注册(RouteTable.Routes
包含新路由)。如果我然后尝试浏览将由新路由服务的URL,它们永远不会到达应该为它们提供服务的控制器 - 我得到一个硬IIS错误页面:
无法找到资源。
那么,如果要添加路由,当MVC框架收到其中一条新路由的请求时,为什么它们不被“看到”?我在某处错过了一步吗?我是否需要告诉MVC框架“重新加载”路由表?
答案 0 :(得分:0)
在我的情况下,路线按此顺序添加:
因此路由工作正常,首次加载,但新路由被添加到路由表的末尾,在非特定的"其他路由"之后。因此,非特定路线一旦被击中就会收到所有请求。
解决方案很简单:
RouteTable.Routes.Insert(0, newRoute)