在IIS 6上使用路由部署ASP.NET 4 Web窗体应用程序

在IIS 6上使用路由部署ASP.NET 4 Web窗体应用程序,asp.net,routing,.net-4.0,url-routing,Asp.net,Routing,.net 4.0,Url Routing,为了澄清,我正在研究的场景涉及部署ASP.NET 4 Web表单应用程序,该应用程序采用RouteTable.Routes.MapPageRoute: public class Global : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { RouteTable.Routes.MapPageRoute("questionnaires", "quest

为了澄清,我正在研究的场景涉及部署ASP.NET 4 Web表单应用程序,该应用程序采用RouteTable.Routes.MapPageRoute

public class Global : System.Web.HttpApplication
{
  public static void RegisterRoutes(RouteCollection routes)
  {
    RouteTable.Routes.MapPageRoute("questionnaires", "questionnaires", "~/Pages/Questionnaires/List.aspx", false);
    RouteTable.Routes.MapPageRoute("questionnaires_submit", "questionnaires/submit", "~/Pages/Questionnaires/Insert.aspx", false);   
  }

  void Application_Start(object sender, EventArgs e)
  {
    RegisterRoutes(RouteTable.Routes);
  }
}
场景1:应用程序不是作为现有网站中的虚拟目录托管的,而是一个独立的网站(它是自己的起点)。它有自己的应用程序池。在部署时,它可以在没有任何修补的情况下工作

场景2:应用程序作为现有网站下的虚拟目录托管。它也有自己的应用程序池。然而,在尝试访问我绘制的路线时,我收到了404个错误。幸运的是,我有让MVC在3.5 sp 1中工作的经验,所以我尝试了这种方法:打开虚拟控制器的属性对话框,转到“目录”选项卡,单击“配置”按钮,并将通配符应用程序映射添加到aspnet_isapi.dll,并取消选中“验证文件存在”复选框。这使它起了作用


我的问题是,为什么我必须在第二个场景中添加通配符应用程序映射,而不是第一个场景?如果有帮助,则在第二种方案中承载虚拟目录的根网站将使用ASP.NET 2.0.50727版进行设置。

ASP.NET 4.0启用无扩展URL的路由 在ASP.NET v4.0中,有一种更好的方法来启用路由。通常,您只对路由无扩展URL感兴趣,而不需要路由静态请求(HTML、JPG、GIF、CSS、JS等)。在v4.0中有一个新功能,允许将无扩展URL定向到托管代码中,而不影响静态请求(HTML、JPG、GIF、CSS、JS等)。由于此功能,在IIS 6上不再需要通配符映射

有关更多信息,请参见此处:


本质上,.NET4.0路由dll比3.5版本更智能。因此,解决方案更少。在您的情况下,独立站点可能在完整的.NET 4.0中运行,而在您的虚拟目录中,根目录在2.0/3.0/3.5模式下运行。希望这有帮助

我感谢您的帮助,这篇文章很有见地,但它仍然没有澄清(对我来说)为什么运行版本4的虚拟目录(在运行版本2的网站设置中)和运行版本4的网站的路由处理方式不同。我假设URL、扩展名等大部分是在根级别控制的。因此,首先调用根配置(.NET 2.0),因为IIS甚至必须知道将请求发送到哪个虚拟目录。请求->IIS->虚拟站点(.NET 2在此处处理文件处理程序/路由)->虚拟目录(.NET 4处理管理代码)。Else请求->IIS->虚拟站点(.NET 4 hanldes托管代码和文件处理程序/路由)