我在 .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 Integrated时,同一应用程序工作正常。有谁知道这是什么原因吗?
更新:我按照以下网址中的步骤操作。
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 错误 403.14 - 禁止)
http://myapp/
自从我将根映射到 Home/Index 操作后,这应该有效。
更新
这是在 Win 7 Ultimate Turbo Gold Premium 64 位系统上的 IIS 7.5 上进行的。应用程序池以集成模式运行。当我切换到经典时,一切都按照广告进行。如果我在经典模式下运行我的应用程序,则会像应有的那样授予公共(public)访问权限。所以问题是:如果我愿意,如何在集成模式下运行它?
最佳答案
在经典模式下,您需要执行通配符映射或在 URI 中的 Controller 名称上使用“.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,我只使用集成模式。
关于asp.net - 为什么 Asp.net mvc 应用程序不能在 Asp.Net Classic 应用程序池上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3070530/