HTTP 错误 403.14 - 禁止 - 带有 IIS Express 的 MVC 4

Posted

技术标签:

【中文标题】HTTP 错误 403.14 - 禁止 - 带有 IIS Express 的 MVC 4【英文标题】:HTTP Error 403.14 - Forbidden - MVC 4 with IIS Express 【发布时间】:2013-06-25 12:34:30 【问题描述】:

这似乎是一个已经被问过/回答过很多次的问题。不是。

开发环境: VS 2012 和 MVC 4。我使用内置的 IIS Express 来运行应用程序。

直到昨天才出现此错误。它突然开始发生,我被卡住了。奇怪的是它只发生在一个场景中。

当我尝试访问 http://localhost:49962/managescholars/ 时,它显示错误

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

但是使用http://localhost:49962/managescholars/Index 可以正常工作。同一控制器的其他操作方法也可以正常工作。如http://localhost:49962/managescholars/create。所有其他控制器也可以正常工作。

我已尝试将以下内容添加到 web.config。

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true" />
  <handlers/>
</system.webServer>

我也试过以管理员身份运行以下命令

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir

但它们都不起作用。

编辑:

我已经修改了我的路线。它们如下所示。

    public static void RegisterRoutes(RouteCollection routes)
    
        routes.IgnoreRoute("resource.axd/*pathInfo");

        routes.MapRoute(
            name: "ManageScholarLectures",
            url: "Manage/Lectures/userFriendlyName",
            defaults: new  controller = MVC.ManageLectures.Name , 
                            action = MVC.ManageLectures.ActionNames.Index, 
                            userFriendlyName = UrlParameter.Optional 
        );

        routes.MapRoute(
            name: "ManageScholarEdit",
            url: "Manage/Scholars/userFriendlyName",
            defaults: new  controller = MVC.ManageScholars.Name, 
                            action = MVC.ManageScholars.ActionNames.Edit 
        );

        routes.MapRoute(
            name: "Default",
            url: "controller/action/id",
            defaults: new  controller = MVC.Home.Name, 
                            action = MVC.Home.ActionNames.Index, 
                            id = UrlParameter.Optional 
        );
    

我正在使用T4MVC 模板。

即使我将默认路由留在底部并删除前两条路由,它仍然不起作用。我做错了什么?

非常感谢您的帮助。

【问题讨论】:

您最近更改了路线吗?那将是我首先要看的地方。 路由应该默认只是一个控制器 URL 到它的索引页面,除非你改变它 是的。你说的对。我最近修改了路线。我已经编辑了我的问题并包含了 RegisterRoutes 方法 我遇到了这个问题,因为我的 MVC 项目的根目录中有一个与区域同名的文件夹。接受的答案也解决了这个问题。 【参考方案1】:

您的路线看起来不错。这不应该引起任何问题。该错误仅在http://localhost:49962/managescholars/ 上发生,这意味着可能存在其他同名资源。 您能否确保您的代码在执行期间不会错误地创建文件夹ma​​nagescholars?”

【讨论】:

非常感谢。这确实是问题所在。我错误地编写了一个可以保存文件并创建文件夹的代码。这创造了导致问题的“管理学者”。 完美答案,“/products”路由也有同样的问题,是的,我有一个物理文件夹和一个名为“products”的控制器,删除了文件夹和宾果游戏!非常感谢! 是的!物理文件夹也是我的问题。 在使用Server.MapPath(.....)时,会使用路由路径作为文件夹(区域名等),如果创建文件夹,会从开始创建从您网站的根路径,这可能会导致路由问题...【参考方案2】:

我遇到了同样的问题。解决起来很容易。

当您在项目设置中编辑保护 URL 中的属性时,由于 IIS Express 冲突而出现此问题。 解决这个问题很容易:

1 - 在“.vs\config”目录中查找文件“applicationhost.config”。此文件夹位于解决方案的根目录。您可以使用记事本++打开它

2 - 使用程序的“查找”(Ctrl + F) 搜索控件的名称。就我而言,出现问题的控件是“办公室”。

3 - 删除您放置此类 URL 的 IIS 设置的任何节点。请参见下面的示例:

    <site name="G4.Admin(1)" id="8">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="C:\Projetos\PortalG4\src\G4.Admin" />
                    <virtualDirectory path="/Offices/Edit" physicalPath="C:\Projetos\PortalG4\src" />
                    <virtualDirectory path="/Offices" physicalPath="C:\Projetos\PortalG4" />
                </application>
                <application path="/Offices/Edit/2" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="C:\Projetos\PortalG4\src\G4.Admin" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:6920:localhost" />
                </bindings>
            </site>

你应该删除每个元素

<site name = "NAME_PROJECT" id = "X">

注意:在进行更改之前备份文件。

拥抱

【讨论】:

正确!,这是大多数时候发生的事情,因此您将得到禁止的错误。 这对我有用,感谢您的指导。【参考方案3】:

首先,我假设

 http://localhost:49962/managescholars/

其实是

 http://localhost:49962/manage/scholars/

。如果没有,那是你的问题:)

我不是路由方面的专家,但在您的 Scholars 路由中,userFriendlyName 参数不是可选的,这意味着 http://localhost:49962/manage/scholars/ 不会匹配您的任何规则,IIS 会将其视为请求列出文件夹的内容。

【讨论】:

【参考方案4】:

太棒了!! 就我而言,这是因为我将应用程序配置为在错误的 url 中运行,但是当我返回正确的 url 时,外观并没有压倒 applicationhost.config。

如上所述,我只设法解决了这些步骤。

【讨论】:

您可以编辑其他答案并添加此答案,而不是制作新答案。【参考方案5】:

如果有人遇到与我相同的问题并绝望地进入此页面。 如果调试网站有效但不能在一个网站上:

检查 global.asax 上的修改 检查路由配置是否仍然存在...

我知道这很愚蠢,但在 git 合并 6 小时后丢失了......

【讨论】:

【参考方案6】:

我知道原始问题已得到解答,但以下在我的情况下有效。 我在使用 IIS Express 的 VS2013 上遇到了完全相同的问题。在我的情况下,访问 /Login 没有在 LoginController 中获得索引操作。我检查时没有物理文件夹,但经过更多挖掘后,我发现在 IIS Express 上为 /Login 路径创建了虚拟目录,导致了这种情况。我从 applicationhost config(Documents\IISExpress\config) 中删除了虚拟目录以解决问题。

【讨论】:

【参考方案7】:

就我而言,使用 Visual Studio 2015,我通过以下步骤解决了问题:

停止 IIS Express 关闭 Visual Studio 删除 我的解决方案目录.vs\config 中的文件 applicationhost.config 删除目录 Documents\IISExpress\config 开始 VS,F5 享受 :)

【讨论】:

【参考方案8】:

在我的情况下,使用@Fl4v 答案后,我在 my solution directory.vs\config 中的文件 applicationhost.config 上搜索 directoryBrowse 属性,结果为假。 更改为true,重新启动iis,现在它终于可以工作了。

【讨论】:

【参考方案9】:

如果没有启用,你应该去用户名/并启用它。

【讨论】:

以上是关于HTTP 错误 403.14 - 禁止 - 带有 IIS Express 的 MVC 4的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 错误 403.14 - 禁止。 ASP.NET MVC

HTTP 错误 403.14 - 禁止 - Web 服务器配置为不列出此目录的内容

HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出内容

HTTP 错误 403.14 - 禁止 - MVC4 .net 4.5 捆绑包

HTTP 错误 403.14 - 禁止 asp.net 5 和 MVC 6 iis10

IIS 7.5、8.0、8.5 HTTP 错误 403.14 - 安装干净的 Windows 后被禁止