【问题标题】:Dynamically created routes only work if app is re-initialized仅当重新初始化应用程序时,动态创建的路由才有效
【发布时间】:2015-12-01 06:14:57
【问题描述】:

在我的网络应用程序中,“子网站”和页面是动态创建的。每当创建新的子站点或(有时)创建新页面时,都会添加路由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 框架“重新加载”路由表?

【问题讨论】:

    标签: c# asp.net-mvc routing asp.net-mvc-5


    【解决方案1】:

    就我而言,路线是按以下顺序添加的:

    1. 基于站点的路由(非常具体)
    2. 根主页(不具体)

    所以路由工作正常,第一次加载,但是新路由被添加到路由表的末尾,在非特定的“其他路由”之后。因此,该非特定路由一旦被命中就会接收所有请求。

    解决方案很简单,要么:

    1. 不要创建非特定路线,或
    2. 在添加新站点/页面时以正确的顺序重建整个路由表,或者
    3. 确保将新站点/页面路由添加到路由表的顶部:RouteTable.Routes.Insert(0, newRoute)

    【讨论】:

      猜你喜欢
      • 2020-03-23
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多