Обнаружение сопоставленных виртуальных каталогов с помощью ihttpmodule в приложении c # .net
-
19-09-2019 - |
Вопрос
У меня есть веб-сайт .net, который содержит IHttpModule, который я написал для выполнения определенных задач (авторизация и т.д.).Но на веб-сайте есть несколько виртуальных каталогов, которые сопоставлены со сторонними приложениями, которые, к сожалению, я не могу изменить или переместить (напримерфорумы сервера сообщества, adxstudio cms и другие).
Я ищу способ предотвратить запуск моего IHttpModule при выполнении запросов к содержимому этих виртуальных каталогов.Возможно ли это?
[Редактировать - добавлено следующее]
Я экспериментировал с добавлением <remove name="X"/>
внутри <httpModules>
узел в файлах Web.config в приложениях виртуального каталога, но, похоже, это не работает.Вероятно, это тоже не самое лучшее решение, потому что сторонние приложения могут быть обновлены, поэтому я не хочу требовать изменений в их коде / конфигурации.
Я также попытался добавить <location path="." inheritInChildApplications="false">
вокруг моего <system.web>
узел в родительском Web.config, но это тоже, похоже, не сработало.
[Отредактируйте еще раз - добавлено больше]
Причина в том, что это не работает, заключается в том, что событие инициализации IHttpModule запускается только один раз за жизненный цикл приложения (а не за запрос, как я предполагал).Поскольку я добавляю кучу прослушивателей событий в событие init, они по-прежнему запускаются при последующих запросах...
Решение
Если у вас есть список этих каталогов и их виртуальных путей, вы можете создать поиск по ним.
Для каждого HttpRequest, который запускает ваш модуль, вы можете проверить наличие виртуального пути, чтобы увидеть, принадлежит ли он какому-либо из путей в поиске.Если да, то вы можете ничего не делать или выйти из кода вашего модуля.
PS:Из-за проблем с производительностью вы, вероятно, захотите сохранить поиск в состоянии приложения (напримерхэш-карта и т.д.)