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

Aam*_*mir 19 c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-4

这似乎是一个已被多次询问/回答的问题.不是.

开发环境: 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.
Run Code Online (Sandbox Code Playgroud)

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

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

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true" />
  <handlers/>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

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

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
Run Code Online (Sandbox Code Playgroud)

但它们都没有奏效.

编辑:

我修改了我的路线.他们看起来如下.

    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 }
        );
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用T4MVC模板.

即使我将默认路由保留在底部并删除前两个路由,它仍然无法工作.我做错了什么?

非常感谢您的帮助.

Yaq*_*mad 60

你的路线似乎很好.这不应该导致任何问题.只发生错误,http://localhost:49962/managescholars/这意味着可能存在一些具有相同名称的其他资源.您能否确保您的代码在执行期间不会错误地创建文件夹管理员?"

  • 非常感谢你.这确实是问题所在.我错误地编写了一个代码来保存文件并创建一个文件夹.这造成了"管理学者",导致了这个问题. (3认同)
  • 完美的答案,与"/ products"路由有同样的问题,是的,我有一个物理文件夹和一个名为"产品"的控制器,删除文件夹和宾果游戏!非常感谢! (2认同)

小智 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>
Run Code Online (Sandbox Code Playgroud)

你应该删除每个元素

<site name = "NAME_PROJECT" id = "X">
Run Code Online (Sandbox Code Playgroud)

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

拥抱