我从数据库中动态获取Url,并通过1个控制器将其传递给多个路由。并且当将url-items的内容体放入View的模型时。 重点是,新页面仅在编译完EDITED项目后开始加载。之前它只显示404页面。
public class DynamicController : MenuController
{
//
// GET: /Dynamic/
s
public ActionResult Indexx(string routes) {
var str = service.Get().Single(x=>x.Url==routes);
return View(str);
}
}
路线:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
/**/ IMenuService<Menu> service = new MenuEntityService();
foreach (var item in service.Get())
{
routes.MapRoute(
name: item.Url,
url: item.Url,
defaults: new { controller = "Dynamic", action = "Indexx",routes=item.Url },
namespaces: new[] { "MvcApplication1.Controllers" }
);
}
答案 0 :(得分:0)
仅在Application_Start
事件中注册路线。此事件仅在您的应用程序的生命周期中发生一次。
因此,需要重新启动应用程序池,以便为已创建的每个动态路径创建路径。 (因此,在重新编译/部署路由后,为什么在App Pool自动重启时)
为了避免每次创建新的动态路径时都需要重新启动应用程序池,更好的选择是创建一个catch all / default路由来处理这些动态页面
//this catches all requests
routes.MapRoute(
"Dynamic page route",
"{*routes}",
new { controller = "Dynamic", action = "Indexx" }
);
答案 1 :(得分:0)
我找到了答案:HttpRuntime.UnloadAppDomain();
我在我的控制器动作中写了它创建菜单项