Почему приложение Asp.net mvc не работает в Asp.Net Classic Application Pool? - PullRequest
2 голосов
/ 18 июня 2010

У меня есть веб-приложение Asp.Net MVC 2, развернутое на IIS 7.5 в .Net 4.0.Когда я выбираю пул приложений как Asp.Net v4.0 Classic , я получаю следующую ошибку:

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

То же приложение работает нормально, когда я выбираю пул приложений как Asp.Net v4.0 интегрированный .Кто-нибудь знает, в чем причина этого?

Обновление: Я выполнил шаги из следующего URL.

http://www.asp.net/mvc/tutorials/using-asp-net-mvc-with-different-versions-of-iis-cs

У меня естьдобавлена ​​карта для расширения .mvc, а также изменена маршрутизация, как показано ниже.

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}.mvc/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );


            routes.MapRoute(
                    "Root",
                    "",
            new { controller = "Home", action = "Index", id = "" }

Теперь следующий URL работает нормально, и я вижу страницу Home / Index.

http://myapp/home.mvc

Но это все равно дает ту же ошибку (ошибка HTTP 403.14 - запрещено)

http://myapp/

Это должно сработать, поскольку я сопоставил действие Root to Home / Index.

Update

Это на IIS 7.5 в 64-битной системе Win 7 Ultimate Turbo Gold Premium.Пул приложений работал в интегрированном режиме.Когда я перешел на классический, все работает как рекламируется.Если я запускаю свое приложение в классическом режиме, общедоступный доступ предоставляется, как и должно быть.Итак, вот вопрос: как мне запустить это в интегрированном режиме, если я хочу?

Ответы [ 3 ]

5 голосов
/ 18 июня 2010

В классическом режиме вам необходимо либо выполнить сопоставление с подстановочными знаками, либо использовать расширения «.mvc» в именах контроллеров в URI. Поэтому вам придется изменить отображение * .mvc в конфигурации IIS ASP.NET на . или изменить маршрут по умолчанию на что-то вроде:

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}.mvc/{action}/{id}",                       // URL with parameters
            new { controller = "Home", action = "Index", id = "" }, // Parameter defaults
            null
        );

Эти методы, безусловно, работают; действительно, это единственный способ поддержать IIS 5-6. С другой стороны, в IIS 7 я бы просто использовал интегрированный режим.

2 голосов
/ 18 июня 2010

Интегрировано относится к режиму интегрированного конвейера IIS: http://msdn.microsoft.com/en-us/magazine/cc135973.aspx

Когда интегрированный режим конвейера отключен, запрос вводимого вами URL-адреса не направляется в ASP.NET. Кроме того, поскольку в папке, к которой вы обращаетесь, нет файла default.aspx или аналогичного «документа по умолчанию», по умолчанию IIS пытается просмотреть список содержимого каталога. По умолчанию этот параметр отключен в IIS, поэтому вы получаете сообщение 403.13 Forbidden error.

1 голос
/ 18 июня 2010

Это потому, что маршрутизация не работает в классическом режиме.В сети есть некоторые обходные пути, но большинство из них работают не очень хорошо.

Вот некоторые объяснения и помощь по этой теме: http://www.asp.net/mvc/tutorials/using-asp-net-mvc-with-different-versions-of-iis-cs

Любая причина, по которой вы не хотите использовать интегрированный

...