Регистрация httpModules в web.config

Я пытаюсь зарегистрировать пользовательский HttpHandler в файле web.config. Пример MSDN показывает запись, которая закомментирована... um, которая не работает так хорошо. Когда я раскомментирую, я получаю ошибку Could not load file or assembly 'HttpModule.cs' or one of its dependencies. The system cannot find the file specified.. Имя файла - HttpModule.cs, а имя класса - MyHttpModule. Пока нет явного пространства имен.

<httpModules>
     <add name="MyHttpModule" type="MyHttpModule, HttpModule" />
<httpModules>

Я уверен, что я игнорирую очевидное. Мне нужно указать путь к файлу где-нибудь? Спасибо заранее.

Ответы

Ответ 1

Я все еще изучаю большую часть терминологии и нуждаюсь в этом для меня. В случае, если кому-то из вас понадобится то же самое...

В качестве примера, если:

  • Имя базового класса и имя проекта TestSite
  • Пространство имен, в котором находится мой класс, находится BusinessLogic
  • Имя класса PageAuthorization

в файле Web.config...

<configuration> 
 <system.web> 
  <httpModules> 
   <add type= "BusinessLogic.PageAuthorization, TestSite" name="PageAuthorization" /> 
  </httpModules> 
 </system.web> 
</configuration>

В моем случае я должен был пометить свой класс IHttpModule. Определение класса будет выглядеть так:

public class PageAuthorization : IHttpModule

Ответ 2

Значение type находится в формате {Class}, {assembly}.

Итак, в вашем случае это должно быть MyHttpModule, MyDllName

Где MyDllName - имя скомпилированной библиотеки DLL.

Ответ 3

Если вы загружаете пользовательский модуль из классического режима .NET 4.0 GAC и IIS 6/7, вы должны использовать ниже код

 <system.web>
  <httpModules>
  <add name="ClientHttpModule" type="ClientServHttpModule.ClientHttpModule,ClientServHttpModule,Version=1.0.0.0, Culture=neutral, PublicKeyToken=3af8d8e2f9e8b6c3" />
      </httpModules>
 </system.web>

ClientServHttpModule - это пространство имен вашего настраиваемого модуля. Ключ открытого ключа вы можете получить из приложения sn.exe.

если вы работаете в режиме Integrated.use ниже кода

<system.webServer>
        <modules>
            <add name="ClientHttpModule" type="ClientServHttpModule.ClientHttpModule,ClientServHttpModule,Version=1.0.0.0, Culture=neutral, PublicKeyToken=3af8d8e2f9e8b6c3" />
        </modules>
    </system.webServer>

Ответ 4

Чтобы добавить к этому, важно убедиться, что .dll, который вы пытаетесь использовать, находится в папке bin проекта. У меня возникла проблема создания моего модуля в отдельном проекте, но я забыл пропустить файл .dll.

Ответ 5

Примечание для людей, приземляющихся здесь, ища конфигурацию для IIS 7 и выше для работы в Интегрированном режиме:

<configuration> 
 <system.webServer> 
  <modules> 
   <add type= "BusinessLogic.PageAuthorization, TestSite" name="PageAuthorization" /> 
  </modules> 
 </system.webServer> 
</configuration>