代码之家  ›  专栏  ›  技术社区  ›  Amitabh

为什么ASP.NET MVC应用程序不能在ASP.NET经典应用程序池上工作?

  •  2
  • Amitabh  · 技术社区  · 16 年前

    我在.NET 4.0上的IIS 7.5上部署了一个ASP.NET MVC 2 Web应用程序。当我选择应用程序池作为 ASP.NET 4.0经典版 我得到以下错误。

    HTTP Error 403.14 - Forbidden
    The Web server is configured to not list the contents of this directory.
    

    当我选择应用程序池作为 ASP.NET v4.0集成版 . 有人知道这是什么原因吗?

    更新: 我按照以下网址中的步骤操作。

    http://www.asp.net/mvc/tutorials/using-asp-net-mvc-with-different-versions-of-iis-cs

    我已经为.mvc扩展添加了一个映射,并修改了如下所示的路由。

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    "Default", // Route name
                    "{controller}.mvc/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                );
    
    
                routes.MapRoute(
                        "Root",
                        "",
                new { controller = "Home", action = "Index", id = "" }
    

    现在,以下URL工作正常,我可以看到主页/索引页。

    http://myapp/home.mvc
    

    但这仍然会产生相同的错误(HTTP错误403.14-禁止)

    http://myapp/
    

    这应该是有效的,因为我已经将根映射到home/index操作。

    更新

    这是在IIS 7.5上的Win7终极涡轮黄金高级64位系统。应用程序池正在集成模式下运行。当我转向经典时,一切都如广告所示。如果我在经典模式下运行我的应用程序,则会像应该的那样授予公共访问权限。所以这里有一个问题:如果我想要的话,如何在集成模式下运行这个?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Craig Stuntz    16 年前

    对于经典模式,您需要在URI中的控制器名称上执行通配符映射或使用“.mvc”扩展名。因此,您必须将IIS ASP.NET配置中的*.mvc映射更改为 . 或者将默认路由更改为:

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}.mvc/{action}/{id}",                       // URL with parameters
                new { controller = "Home", action = "Index", id = "" }, // Parameter defaults
                null
            );
    

    这些方法确实有效;实际上,这是支持IIs5-6的唯一方法。另一方面,对于IIS7,我只使用集成模式。

        2
  •  2
  •   mt0321    16 年前

    集成是指IIS集成管道模式: http://msdn.microsoft.com/en-us/magazine/cc135973.aspx

    当关闭集成管道模式时,您输入的URL请求不会路由到ASP.NET。此外,由于在您要访问的文件夹中没有default.aspx或类似的“default document”,因此IIS默认为尝试列出目录的内容。默认情况下,此设置在IIS中被禁用,因此您将收到403.13禁止错误。

        3
  •  1
  •   Marks    16 年前

    这是因为路由在经典模式下不工作。网上有一些解决办法,但大多数都不太好用。

    以下是有关此主题的一些解释和帮助: http://www.asp.net/mvc/tutorials/using-asp-net-mvc-with-different-versions-of-iis-cs

    您不想使用集成的任何原因?