Server.Transfer vs. Context.RewritePath - PullRequest
       21

Server.Transfer vs. Context.RewritePath

13 голосов
/ 03 декабря 2008

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

Ответы [ 3 ]

9 голосов
/ 03 декабря 2008

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

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

Подробнее читайте в следующих статьях MS:

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

Согласно HttpContext.RewritePath на MSDN , RewritePath() используется в состоянии сеанса без файлов cookie.

Кроме того, по другой теме Server.Transfer() и Server.Execute() сильно отличаются:

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

Например:

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

Будет выводить:

тест 1
содержание include.aspx? Hello = ok
тест 2

1 голос
/ 03 декабря 2008

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

1 голос
/ 03 декабря 2008

Context.RewritePath Назначает внутренний путь перезаписи и позволяет запрашиваемому URL-адресу отличаться от внутреннего пути к ресурсу. RewritePath используется в состоянии сеанса без файлов cookie.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...