ASP MVC проблема маршрутизации с IIS7 - PullRequest
5 голосов
/ 13 марта 2009

Мы обнаружили проблему при развертывании приложения MVC на сервере IIS7: любая навигация по маршруту выдает ошибку 404. В Интернете я обнаружил, что эту проблему можно решить, установив интегрированный режим управляемого конвейера пула приложений, но теперь у нас есть исключение:

Request is not available in this context

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Request is not available in this context

Source Error: 


Line 19: 
Line 20:         public override void SetActiveUser(Guid userOid) {
Line 21:             FormsAuthentication.SignOut();
Line 22:             HttpContext.Current.Items[Key] = userOid.ToString();
Line 23:             FormsAuthentication.RedirectFromLoginPage(userOid.ToString(), true); 

У кого-нибудь есть идеи?

Ответы [ 3 ]

10 голосов
/ 13 марта 2009

Возможно, проблема в файле web.config. Начиная с IIS7, теперь есть два места для настройки обработчиков и модулей. Когда вы работаете в классическом режиме, это похоже на работу в IIS 6 (хотя в IIS7).

Вот файл конфигурации:

<system.web>
[...]
    <httpHandlers>
            [...]
        </httpHandlers>
        <httpModules>
            [...]
            <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

        </httpModules>
    </system.web>

должны быть только конфигурации IIS 6.

Конфигурация IIS 7 должна быть помещена в:

    <system.webServer>
[...]
            <modules runAllManagedModulesForAllRequests="true" >
                <remove name="UrlRoutingModule"/>
                <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            </modules>
            <handlers>
                <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            </handlers>
        </system.webServer>
1 голос
/ 13 марта 2009

Чтобы обмануть то, что сказал квалканти. Стандартная маршрутизация была разработана для IIS 7. Для старых версий IIS добавлен ключ. Так что, если вы работаете с более старыми версиями, у вас есть версия конфигурационного файла в kludged-версии. Изменение конфига решает проблему.

В дополнение к тому, что упоминает kvalcanti, есть вероятность, что в вашем global.asax также настроен небольшой клудж. Я не уверен, что он все еще является обязательным в новейшей версии ASP.NET MVC, или нет, поскольку я не рассматривал ничего, кроме Vista, в последние несколько месяцев.

Этот пост имеет некоторое понимание: http://www.developingfor.net/aspnet-mvc/deploying-aspnet-mvc-on-iis6.html

У Скотта Гатри была отличная запись в блоге об этом в его блоге (http://weblogs.asp.net/scottgu/),, но у меня его нет в закладке.

0 голосов
/ 28 марта 2011
  1. Открыть Nuget
  2. Установить NotFoundMvc
  3. ???
  4. Прибыль
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...