【问题标题】:Asp.net WebForms app that runs MVC in a subfolder在子文件夹中运行 MVC 的 Asp.net WebForms 应用程序
【发布时间】:2011-03-23 15:53:24
【问题描述】:
假设我有一个 Asp.net WebForms 应用程序,它具有:
- 根文件夹中很少有 *.aspx 文件作为 WebForms 应用程序运行(不涉及路由)
- 一个子文件夹,即 FormsFolder,其中包含作为常规 Web 表单应用程序运行的其他文件和子文件夹
- 一个子文件夹 MvcFolder,它具有 Asp.net MVC 应用程序的正常结构并同时运行其内容
- 路由使用
HttpModule 注册,而不是global.asax
- 此应用程序的两个部分(或两个应用程序,如果您愿意)必须在同一个 IIS 应用程序下运行(因此在有两个应用程序时,只能使用虚拟目录)
这里有一些问题:
- 这种情况可能吗?
- 是否可以在不更改任何代码的情况下将 MVC 应用程序附加到 WebForms 应用程序?配置可以更改,但如果可以使用子文件夹配置,则应尽可能避免。
- 是否可以将
UrlRoutingModule 配置为仅在对特定子文件夹发出请求但未在应用程序的其他部分配置时运行?
【问题讨论】:
标签:
asp.net
asp.net-mvc
integration
webforms
【解决方案1】:
事实上,这是可能的,因为它们将在同一个应用程序的上下文中运行,这应该不是问题。您可能需要做的是为自己注册一个指向 /MvcFolder/Views 的新 ViewEngine 用于您的视图。应用程序的根目录仍然是 ~/ 所以你可能需要确保你的路由考虑到这一点,例如通过使用类似 'MvcFolder/{controller}/{action}' 等作为路由规则。
MVC 和 WebForms 应用程序可以毫无问题地并行运行。 UrlRoutingModule 将在请求到达 WebForms HttpHandler 之前匹配任何规则,因此请注意路由任何规则,例如“DoSomething.aspx”,因为这将被 MVC 拦截。
如果您选择不在基本 web.config 中注册 UrlRoutingModule,您可以在 /MvcFolder/web.config 文件中注册它。这将停止在 /MvcFolder 之外匹配任何路由。
为什么要在 HttpModule 中注册规则?这些将针对每个请求运行,所以您确定您没有在每个请求中不必要地注册规则吗?