В моем приложении ASP.NET у меня есть два модуля HTTP. Один из них используется для перезаписи URL, другой - для конкретных приложений (пользовательская аутентификация и т. Д.). Модуль перезаписи URL выполняется для всех запросов, тогда как другой модуль выполняется только для управляемых расширений файлов, например .aspx
Вот как модули определены в web.config (обратите внимание, что preCondition пусто для UrlRewriteModule. Это заставляет его выполняться для всех запросов):
<system.webServer>
<modules>
<add name="UrlRewriteModule" type="MySite.UrlRewriteModule" preCondition="" />
<add name="SiteModule" type="MySite.SiteModule" preCondition="managedHandler" />
</modules>
</system.webServer>
В UrlRewriteModule я использую RewritePath () для перезаписи некоторых URL-адресов (похожих на директории) в файлы со строками запроса. Например, от "/ p / 5 / some-ideas-about-the-future /" до "/post.aspx?id=5"
Теперь у меня сложилось впечатление, что при перезаписи URL-адреса IIS7 выполняет управляемый модуль (в данном случае SiteModule), если новый URL-адрес предназначен для управляемого расширения (например, .aspx). Но, похоже, это не так. Я заметил, что SiteModule не выполняется ни для одного переписанного URL.
Я что-то упускаю (или делаю что-то не так), или это нормальное поведение в IIS7?
Я натолкнулся на Server.TransferRequest (), который фактически решает проблему (за кулисами это включает создание нового дочернего запроса). Но это также может вызвать много накладных расходов esp. под нагрузкой сервера, и я обычно предпочитаю избегать этого.
Итак, есть ли способ заставить SiteModule выполняться всякий раз, когда URL перезаписывается без использования Server.TransferRequest ()?
Спасибо!