Обнаружение сопоставленных виртуальных каталогов из модуля ihttp в приложении c # .net - PullRequest
2 голосов
/ 07 февраля 2010

У меня есть веб-сайт .net, который содержит IHttpModule, который я написал для выполнения определенных задач (авторизация и т. Д.). Но на веб-сайте есть ряд виртуальных каталогов, которые сопоставляются сторонним приложениям, которые, к сожалению, я не могу изменить или переместить (например, форумы сервера сообщества, adxstudio cms и другие).

Я ищу способ запретить запуск моего IHttpModule при запросах содержимого этих виртуальных каталогов. Это возможно?

[Правка - добавлено следующее]

Я экспериментировал с добавлением <remove name="X"/> внутри узла <httpModules> в файлах Web.config в приложениях виртуального каталога, но, похоже, это не сработало. Возможно, это не очень хорошее решение, потому что сторонние приложения могут быть обновлены, поэтому я не хочу требовать изменений в их коде / конфигурации.

Я также попытался добавить <location path="." inheritInChildApplications="false"> вокруг моего <system.web> узла в родительском Web.config, но это тоже не сработало.

[Изменить еще раз - добавлено больше]

Причина не работает, потому что событие Init IHttpModule вызывается только один раз за жизненный цикл приложения (а не за запрос, как я предполагал). Так как я добавляю несколько слушателей событий в событие init, они все еще запускаются при последующих запросах ...

1 Ответ

2 голосов
/ 07 февраля 2010

Если у вас есть список этих каталогов и их виртуальные пути, вы можете создать их поиск.

Для каждого запроса HttpRequest, который запускает ваш модуль, вы можете проверить виртуальный путь, чтобы увидеть, принадлежит ли он любому пути в поиске. Если да, то вы ничего не можете сделать или выйти из кода вашего модуля.

PS: из-за проблем с производительностью вы, вероятно, хотите сохранить поиск в состоянии приложения (например, hashmap и т. Д.)

...