为什么Asp.net mvc应用程序不能在Asp.Net Classic Application Pool上运行?

时间:2010-06-18 14:38:28

标签: asp.net asp.net-mvc asp.net-mvc-2 iis application-pool

我在.Net 4.0上的IIS 7.5上部署了一个Asp.Net MVC 2 Web应用程序。当我选择应用程序池为 Asp.Net v4.0 Classic 时,我收到以下错误。

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 = "" }

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

http://myapp/home.mvc

但是仍然会出现相同的错误(HTTP Error 403.14 - Forbidden)

http://myapp/

这应该有效,因为我已将Root映射到Home / Index操作。

更新

这是在Win 7 Ultimate Turbo Gold Premium 64位系统上的IIS 7.5上。应用程序池以集成模式运行。当我切换到经典时,一切都像广告一样有效。如果我在经典模式下运行我的应用程序,则应该像它应该那样授予公共访问权限。所以这就是问题:如果我想要如何在集成模式下运行它?

3 个答案:

答案 0 :(得分:5)

使用经典模式,您需要执行通配符映射或在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
        );

这些方法肯定有效;实际上,这是支持IIS 5-6的唯一方法。另一方面,使用IIS 7,我只使用集成模式。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

因为路由在经典模式下不起作用。网上有一些解决方法,但大多数都不能很好地工作。

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

您不想使用集成的任何理由?