Ошибка MVC Asp.net с настроенными управляемыми модулями - PullRequest
2 голосов
/ 21 июля 2009

У меня есть пользовательская аутентификация HttpModule, которая довольно прямолинейна. Но я хочу, чтобы он запускался только для управляемых запросов (а не для статических).

Asp.net MVC автоматически добавляет раздел конфигурации для веб-сервера IIS7:

<system.webServer>
   <validation validateIntegratedModeConfiguration="false" />
   <modules runAllManagedModulesForAllRequests="true">
      <remove name="ScriptModule" />
      <remove name="UrlRoutingModule" />
      <add name="ScriptModule"
           preCondition="managedHandler"
           type="System.Web.Handlers.ScriptModule,..." />
      <add name="UrlRoutingModule"
           type="System.Web.Routing.UrlRoutingModule,..." />
   </modules>
   <handlers>
      ...
   </handlers>
</system.webServer>

Когда я добавляю свой собственный модуль, я также устанавливаю его preCondition="managedHandler", но поскольку в родительском элементе <module> есть runAllManagedModulesForAllRequests="true", мой preCondition игнорируется (как я читал в MSDN).

Когда я пытаюсь установить:

<modules runAllManagedModulesForAllRequests="false">

Я получаю ошибку.

Что еще (какой другой модуль) мне нужно установить в web.config, чтобы эта настройка работала:

<modules runAllManagedModulesForAllRequests="false">

Ответы [ 2 ]

3 голосов
/ 22 июля 2009

Я думаю, что вы получили сообщение об ошибке, потому что ваше приложение полагалось на какой-то другой управляемый модуль (Session), и этот модуль был настроен на выполнение только запросов к управляемому обработчику (runAllManagedModulesForAllRequests = "false").

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

<modules>
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
</modules>
2 голосов
/ 22 июля 2009

Хорошо. Таким образом, у меня есть решение с обходным путем для этого. Я все еще должен был использовать настройки модулей по умолчанию как:

<modules runAllManagedModulesForAllRequests="true">

Но я смог отключить свой пользовательский модуль аутентификации, установив дополнительные записи web.config для определенных мест, например:

<location path="~/App_Themes">
    <system.web>
        <authentication mode="None" />
    </system.web>
</location>

<location path="~/Content">
    <system.web>
        <authentication mode="None" />
    </system.web>
</location>

<location path="~/Scripts">
    <system.web>
        <authentication mode="None" />
    </system.web>
</location>

Поэтому я отключил аутентификацию на определенных путях. Это обходной путь, а не реальное решение. Таким образом, вы все еще можете предоставить свои собственные предложения или даже решения, которые на самом деле относятся к конфигурации runAllManagedModulesForAllRequests="true" по умолчанию Asp.net MVC.

...