Ошибка HTTP 403.14 - Запрещено - MVC 4 с IIS Express

Это похоже на вопрос, который уже неоднократно задавался/отвечал. Его нет.

Среда разработки. 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

Но никто из них не работал.

Edit:

Я изменил свои маршруты. Они выглядят следующим образом.

    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.

Он по-прежнему не работает, даже если я оставляю маршрут по умолчанию внизу и удаляю первые два маршрута. Что я сделал неправильно?

Большое спасибо за вашу помощь.

Ответы

Ответ 1

Ваши маршруты кажутся прекрасными. Это не должно вызывать никаких проблем. Ошибка возникает только на http://localhost:49962/managescholars/, что означает, что может быть другой ресурс с тем же именем. Можете ли вы убедиться, что ваш код не ошибочно создает папку managescholars во время выполнения? "

Ответ 2

Во-первых, я предполагаю, что

 http://localhost:49962/managescholars/

на самом деле

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

. Если нет вашей проблемы:)

Я не эксперт по маршрутам, но на вашем маршруте для Scholars параметр userFriendlyName не является необязательным, что означает, что http://localhost:49962/manage/scholars/ не будет соответствовать ни одному из ваших правил, и IIS будет обрабатывать запрос укажите содержимое папки.

Ответ 3

В случае, если кто-то получит ту же проблему, что и я, и введите эту страницу. Если веб-сайт отладки работает, но не на одном веб-сайте:

Проверить модификацию на global.asax Проверьте, сохраняется ли конфигурация маршрута...

Я знаю, что он немой, но потерял через 6 часов после слияния git...

Ответ 4

Я знаю, что на исходный вопрос ответил, но ниже работал в моем случае. Я получил то же самое на VS2013, используя IIS Express. В моем случае посещение /Login не получало действие Index в LoginController. Когда я проверил, физической папки не было, но после большего поиска я обнаружил, что в пути IIS Express для /Login был создан виртуальный каталог, который вызвал это. Я удалил виртуальный каталог из confighosthost (Documents\IISExpress\config), чтобы решить проблему.

Ответ 5

Я столкнулся с той же проблемой. Решение очень просто.

Эта проблема возникает из-за конфликта IIS Express при редактировании свойств в URL-адресе защиты в настройках проекта. Для решения этой проблемы очень просто:

1 - Найдите файл "applicationhost.config" в каталоге ".vs\config". Эта папка находится в корне решения. Вы можете открыть его с помощью Notepad ++

2 - Найдите имя своего элемента управления, используя 'find' вашей программы (Ctrl + F). В моем случае контроль, который дал проблему, был "Офисы".

3 - Удалите любой node, где вы поместите параметры IIS для такого URL-адреса. См. Пример ниже:

    <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>

Ответ 6

Отлично! В моем случае это было связано с тем, что я настроил приложение на запуск неправильного URL-адреса, но когда я вернусь к правильному, внешний вид не подавил приложение applicationhost.config.

Как я уже говорил выше, мне удалось решить эти шаги.

Ответ 7

В моем случае с Visual Studio 2015 я решил проблему со следующими шагами:

  • Остановить IIS Express
  • Закрыть Visual studio
  • Удалить файл applicationhost.config в {my solution directory}.vs\config
  • Удалить каталог Документы \IISExpress\config
  • Запустите VS, F5 и наслаждайтесь:)