Событие жизненного цикла приложения не запускается при передаче Server.Transfer

У меня есть настраиваемый модуль перезаписи, и когда передаются определенные параметры строки запроса, мне нужно иметь возможность вызывать server.transfer, а не response.redirect из-за программного обеспечения adserve и отслеживания

в событии инициализации модуля RewriteModule я регистрирую события:

BeginRequest PreRequestHandlerExecute ReleaseRequestState

когда вызывается Response.Redirect, фактически вызывается событие ReleaseRequestState, и модуль перезаписи завершается, и устанавливаются новые URL-адреса управления

когда вызывается Server.Transfer, событие ReleaseRequestState не вызывается и дружественные URL-адреса не устанавливаются

Я думаю, что понимаю разницу между Response.Redirect и Server.Transfer, но я не могу понять, почему событие на самом деле не вызывается - вызывается ли событие Session.End или Session.Abandon, и это событие никогда не запускается? или здесь происходит что-то совсем другое

Благодарность

Павел


person stack72    schedule 26.07.2010    source источник


Ответы (1)


Я предполагаю, что это тонкие различия между ними.

Response.Redirect выполняет перенаправление на стороне клиента - это означает, что клиентскому браузеру отправляется сообщение, в котором он запрашивает другой URL-адрес и, следовательно, дает вам новый запрос.

Server.Transfer не создает новый запрос (http://msdn.microsoft.com/en-us/library/y4k58xk7.aspx). Он просто перестает работать на текущей странице и начинает работу на другой странице - новых запросов нет.

person PatrickSteele    schedule 26.07.2010
comment
Привет, спасибо, что связались со мной - если нового запроса нет, тогда он наверняка продолжит вызывать событие PostReleaseState, а не просто убивает запрос? - person stack72; 26.07.2010
comment
Похоже, так и должно быть. Если внутри конвейера не происходит какое-то волшебство, чтобы узнать, было ли получено состояние. Если состояние не было получено (например, для запроса .css), возможно, фреймворк не вызывает ReleaseRequestState. Просто предположение - я этого не знаю. - person PatrickSteele; 26.07.2010