【问题标题】:HTTP Error 403.14 - Forbidden - MVC 4 with IIS ExpressHTTP 错误 403.14 - 禁止 - 带有 IIS Express 的 MVC 4
【发布时间】: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 项目的根目录中有一个与区域同名的文件夹。接受的答案也解决了这个问题。

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


【解决方案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】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-12-17
              • 2013-03-18
              • 1970-01-01
              • 1970-01-01
              • 2013-04-24
              • 1970-01-01
              • 2014-07-29
              相关资源
              最近更新 更多