【问题标题】:Mapping RouteTable on PreInit() - Will it cause any problems?在 PreInit() 上映射 RouteTable - 它会导致任何问题吗?
【发布时间】:2012-12-04 16:34:25
【问题描述】:

我的页面路由映射会根据某些条件而变化。要确定此标准,我需要访问HttpRequest,这意味着我无法在Application_Start() 中进行路线映射。在那张纸条上,我已经在我的默认页面上的PreInit() 上完成了它,它似乎可以正常工作。但是,我在路由表中看到的所有示例都是在 Application_Start 中执行的,这纯粹是为了避免清除路由列表并再次添加它们吗?这样做会不会对我的 Web 应用程序造成任何损害?

编辑:示例:

我根据项目编号以及是否在移动设备上查看网站从不同文件夹加载控件,在此说明中,我需要在映射路线之前了解这些信息,如下所示:

RouteCollection.MapPageRoute("OneParam", "{Action}.html", String.Format("~/{1}{2}/Default.aspx", ProjectNumber, MobilePathStr));

这将映射到类似~/1234/Mobile/Default.aspx 或可以映射到~/1234/Default.aspx

【问题讨论】:

  • 这不是一个好主意。你想完成什么?
  • 我添加了一个我正在做的例子。
  • 路由集合是全局(共享)状态。那是行不通的。
  • 啊,非常有道理!我完全忘记了这一点

标签: asp.net routes asp.net-4.0


【解决方案1】:

不要那样做。

相反,您应该创建自己的 RouteBase 类,该类为每个请求查找该信息并运行相应的处理程序。

要发送到 ASPX 页面,您可以return BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as Page; 或创建PageRouteHandler 并委托给它。

【讨论】:

    猜你喜欢
    • 2013-04-04
    • 2018-12-21
    • 2023-03-30
    • 1970-01-01
    • 2014-04-05
    • 2023-01-07
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多