21

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

开发环境: 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模板。

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

非常感谢您的帮助。

4

9 回答 9

67

你的路线看起来不错。这不应该引起任何问题。该错误仅发生在http://localhost:49962/managescholars/这意味着可能存在其他具有相同名称的资源。你能确保你的代码在执行过程中不会错误地创建一个文件夹managescholars吗?”

于 2013-06-27T07:00:46.133 回答
5

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

当您在项目设置中编辑保护 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">

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

拥抱

于 2017-04-28T19:46:08.563 回答
1

首先,我假设

 http://localhost:49962/managescholars/

实际上是

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

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

我不是路线专家,但在您的路线中ScholarsuserFriendlyName参数不是可选的,这意味着它http://localhost:49962/manage/scholars/不符合您的任何规则,IIS 会将其视为列出文件夹内容的请求。

于 2013-06-26T15:22:39.590 回答
1

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

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

于 2017-04-28T20:30:48.767 回答
0

万一有人遇到同样的问题,我会绝望地进入这个页面。如果调试网站有效但不在一个网站上:

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

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

于 2017-01-05T08:54:20.490 回答
0

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

于 2017-02-17T00:17:01.453 回答
0

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

  • 停止 IIS Express
  • 关闭视觉工作室
  • 删除 {我的解决方案目录}.vs\config 中的文件 applicationhost.config
  • 删除目录 Documents\IISExpress\config
  • 开始 VS,F5 并享受 :)
于 2017-12-08T13:37:36.870 回答
0

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

于 2018-09-14T11:33:34.273 回答
0

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

于 2018-09-26T18:33:10.313 回答