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

4

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

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

以下是一些问题:

  1. 这种情况是否可能?
  2. 是否可以将MVC应用程序附加到WebForms应用程序而不更改后者的任何代码?如果可以使用子文件夹配置,则应尽量避免更改配置。
  3. 是否可以配置 UrlRoutingModule 仅在请求特定子文件夹时运行,但未在应用程序的其他部分进行配置?
1个回答

4
这是可能的,实际上,由于它们将在同一应用程序的上下文中运行,所以这不应该成为问题。您可能需要做的是注册一个新的ViewEngine,指向/MvcFolder/Views以获取您的视图。应用程序的根目录仍然是~/,因此您可能需要确保您的路由考虑到这一点,例如通过设置'MvcFolder/{controller}/{action}'等作为路由规则。
MVC和WebForms应用程序可以并存而无需任何问题。UrlRoutingModule将匹配请求到达WebForms HttpHandler之前的任何规则,因此请注意不要路由任何规则,如'DoSomething.aspx',因为这会被MVC拦截。
如果您选择不在基本web.config中注册UrlRoutingModule,则可以在/MvcFolder/web.config文件中注册它。这将阻止在/MvcFolder之外匹配任何路由。
为什么要在HttpModule中注册规则?这些将针对每个请求运行,因此您确定不必在每个请求中注册规则。

我正在模块中注册规则,因为我不被允许更改webform的应用程序global.asax文件和类。我的模块以一种方式工作,只注册路由一次而不总是注册。查看这个问题,你会发现,实际上有可能在http模块中拦截应用程序启动事件,即使它不是直接支持的。https://dev59.com/JXA75IYBdhLWcg3wS3FA - Robert Koritnik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接