2013-11-20 3 views
0

У меня есть код в моем проекте, который изменяет URL-адрес, содержащий текст, как числовое значение для числа, чтобы получить данные из базы данных. Я проверяю querystring в загрузке страницы, и если он содержит имя, а не номер, я сопоставляю его с цифровым ключом. Теперь я должен снова выполнить жизненный цикл страницы. У меня было два выбора, либо использоватьПользовательский HttpModule не вызывается при использовании Server.Transfer

 Response.Redirect 

, но я не хочу, чтобы URL в браузере клиента, чтобы изменить таким образом, я пошел с

 Server.Transfer 

Проблема, которую я начал облицовкой, что у меня есть обычай httpmodule, который используется для регистрации URL-адресов в базе данных. Я понял, что

  BeginRequest 

в модуле HTTP не стреляя после

 Server.Transfer 

Мое приложение работает отлично в случае

 Response.Redirect. 

Я не знаю, как и почему сервер .Transfer пропускает мой HttpModule, и если это так, как это работает?

ответ

1

Server.Transfer является полностью механизм на стороне сервера - это конкретизирует новый Page класс, основанный на пути к .aspx файла и передает выполнение там (включая всю информацию о состоянии для встроенных объектов). Нет нового запроса, и по конвейеру ничего не происходит (так что, помимо прочего, HttpModules не выполняются повторно), поскольку заинтересованная часть заинтересована, это по-прежнему тот же запрос - ответ только что был создан с другой страницы, чем это было первоначально планировалось.

Response.Redirect относится к стандартному механизму HTTP. На стороне сервера он генерирует исключение, чтобы разбить текущий конвейер выполнения и вернуть код состояния 3xx. Затем браузер выдает новый запрос для ресурса по новому URL-адресу. Оба запроса проходят полный конвейер на стороне сервера.

Таким образом, ответ на ваш вопрос сводится к тому, что HttpModules выполняется для каждого предстоящего запроса, но в случае Server.Transfer нового запроса на данный момент нет.

Смежные вопросы