2010-07-31 67 views
4

比方说,我有一个具有Asp.net的WebForms应用:在根文件夹运行MVC中的子文件夹Asp.net的WebForms应用

  • 几个* .aspx文件,作为Web窗体应用程序(不涉及路由运行)
  • 的子目录下,即FormsFolder已在它的其他文件和子文件夹,作为一个常规的网络运行窗体应用程序
  • 的子目录下,MvcFolder有一个Asp.net MVC应用程序的正常结构和运行它的内容作为一个以及
  • 路由使用此应用程序的(如果你喜欢这两个应用或)的HttpModule而不是global.asax
  • 两部分都必须在相同的IIS应用程序下运行的登记(所以有两个应用程序,仅可以使用虚拟目录)

这里有一些问题:

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

回答

4

事实上,这是可能的,因为它们将在同一应用程序的上下文中运行,所以它不应该成为问题。您可能需要做的是为您的视图注册一个新的ViewEngine,指向/ MvcFolder/Views。应用程序的根目录仍然是〜/因此您可能需要确保您的路线将此考虑在内,例如,通过像'MvcFolder/{控制器}/{动作}'等路由规则。

MVC和WebForms应用程序可以并排运行,没有问题。在请求到达WebForms HttpHandler之前,UrlRoutingModule将匹配任何规则,所以请谨慎选择任何规则,如“DoSomething.aspx”,因为这将被MVC拦截。

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

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

+0

关于自定义视图引擎的好主意。 – 2010-07-31 17:43:06

+0

我正在注册模块中的规则,因为我不允许更改webform的应用程序global.asax文件和类。我的模块以某种方式工作,所以它只注册一次路由**而不总是。看看这个问题,你会发现,实际上有可能拦截http模块中的应用程序启动事件,即使它不直接受支持。 http://stackoverflow.com/questions/3370839 – 2010-07-31 17:44:29