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

时间:2010-06-01 22:05:00

标签: asp.net routing .net-4.0 url-routing

为了澄清,我正在考虑的场景涉及部署使用 RouteTable.Routes.MapPageRoute 的ASP.NET 4 Web窗体应用程序:

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进行设置。

1 个答案:

答案 0 :(得分:3)

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上您不再需要通配符映射

有关详细信息,请参阅此处:

MSDN

基本上,.NET 4.0路由dll比3.5版本更智能。结果,减少了工作量。在您的情况下,您可能在完整的.NET 4.0中运行独立站点,而在您的虚拟目录中,根目录在2.0 / 3.0 / 3.5模式下运行。希望这有帮助!