在子文件夹中运行MVC的Asp.net WebForms应用程序

时间:2010-07-31 15:08:30

标签: asp.net asp.net-mvc integration webforms

假设我有一个Asp.net WebForms应用程序:

  • 根文件夹中的少量* .aspx文件作为WebForms应用程序运行(不涉及路由)
  • 子文件夹,即 FormsFolder ,其中包含其他文件和子文件夹,作为常规Web表单应用程序运行
  • 子文件夹 MvcFolder ,它具有Asp.net MVC应用程序的正常结构,并将其内容作为一个内容运行
  • 使用HttpModule而非global.asax
  • 注册路线
  • 此应用程序的两个部分(或两个应用程序,如果您愿意)必须在同一个IIS应用程序下运行(因此有两个应用程序,只能使用虚拟目录)

以下是一些问题:

  1. 这种情况一切皆有可能吗?
  2. 是否可以将MVC应用程序附加到WebForms应用程序而不更改后者的代码?可以更改配置,但如果可以使用子文件夹配置,则应尽可能避免配置。
  3. 是否可以将UrlRoutingModule配置为仅在针对特定子文件夹发出请求但未在应用程序的其他部分中配置时运行?

1 个答案:

答案 0 :(得分:4)

事实上,这是可能的,因为它们将在同一个应用程序的上下文中运行,这应该不是问题。您可能需要做的就是为自己注册一个新的ViewEngine,它指向您的视图的/ MvcFolder / Views。应用程序的根目录仍然是〜/因此您可能需要确保您的路由考虑到这一点,例如:通过将“MvcFolder / {controller} / {action}”等内容作为路由规则。

MVC和WebForms应用程序可以并行运行,没有任何问题。 UrlRoutingModule将在请求到达WebForms HttpHandler之前匹配任何规则,因此要小心路由任何规则,例如'DoSomething.aspx',因为这将被MVC截获。

如果您选择不在基本web.config中注册UrlRoutingModule,则可以在/MvcFolder/web.config文件中注册它。这将停止在/ MvcFolder之外匹配的任何路由。

为什么要在HttpModule中注册规则?这些将针对每个请求运行,因此您确定不会在每个请求中不必要地注册规则吗?