2008-12-03 2 views
13

Я понимаю, что они оба не меняют URL-адрес, который видит клиент. Есть ли что-нибудь в них, что делает одно из них предпочтительным по сравнению с другим?
Я планирую использовать его в Application_BeginRequest в Global.asax, но также и на обычной странице aspx.Server.Transfer vs. Context.RewritePath

ответ

9

Я думаю, что Context.RewritePath() - лучший вариант. Причина:

Server.Transfer() каждый раз бросает a ThreadAbortException. Результат звонка Response.End().

Для получения более подробной информации прочитайте следующие статьи MS:

Дополнительная информация:
Server.Transfer() не отправляет команду HTTP 302 перенаправления, как Response.Redirect() бы ,

Согласно HttpContext.RewritePath on MSDN, RewritePath() используется в состоянии cookieless session.

Кроме того, на другом объекте, Server.Transfer() и Server.Execute() очень разные:

Server.Execute() возвращает управление на первоначальную страницу сразу после того, как, где она была вызвана.

Для примера:

<div> 
    test 1 <br/> 
    <% Server.Execute("include.aspx?hello=ok"); %> 
    test 2 <br/> 
</div> 

выведет:

тест 1
содержание include.aspx привет = нормально
тест 2

1

контекст. RewritePath Назначает внутренний путь перезаписи и позволяет запрашивать URL-адрес, отличный от внутреннего пути к ресурсу. RewritePath используется в состоянии cookieless session.

Принимая во внимание, что Server.transfer передает содержимое, собранное для обработки одной страницы на другую страницу.

1

Чтобы избежать исключения, вызванного Server.Transfer, вы можете использовать Server.Execute. Как Server.Transfer, так и Server.Execute НЕ выдает 302 HTTP-сообщение. Только Response.Redirect выдает этот заголовок и просит браузер перейти в новый пункт назначения, утверждая, что он был временно перемещен. Как Server.Transfer, так и Server.Execute позволяют выполнять другую страницу для обслуживания текущего запроса.

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