有什么区别 Server.TransferResponse.Redirect?

  • 什么优点和缺点的每个?
  • 当是一个适当的?
  • 当是一个不合适?
有帮助吗?

解决方案

Response.Redirect 简单地发送消息 (HTTP302) 下浏览器。

Server.Transfer 发生而不知道任何浏览器,浏览器的要求的一页,但是服务器返回的内容。

其他提示

Response.Redirect() 会把你送到一个新的网页,更新地址栏,添加以浏览器的历史。浏览器上,你可以点击返回。

Server.Transfer() 不改变地址栏。你不能打回来的。

我用 Server.Transfer() 当我不想用户看到那里我下去。有时在一个"装载"类页。

否则我会一直使用 Response.Redirect().

是短: Response.Redirect 简单地告诉浏览器访问的另一个网页。 Server.Transfer 有助于降低服务器的请求,保持URL相同,与一个小错误抨击,允许转移查询串及形式变量。

我找到并同意(来源):

Server.Transfer 类似于发送用户的另一页 有一个声明如 Server.Transfer("WebForm2.aspx").但是, 该声明具有一些明显的优点和缺点。

首先,转移到另一个网页使用 Server.Transfer 保护服务的资源。而不是告诉浏览器 重定向,它只是变化的"焦点"网络服务器上和 转让的请求。这意味着你没有得到相当多HTTP 请求通过,因此减轻压力你 网络服务器并使得您的应用运行得更快。

但要注意:因为"转移"进程可以工作,只有这些 网站上运行服务器;你不能使用 Server.Transfer 发送 用户的一个外部网站。只 Response.Redirect 可以这样做。

其次, Server.Transfer 维持原来的网址浏览器。这真的可以帮助精简数据输入技术,尽管它可能 作为混乱时的调试。

这还不是全部:的 Server.Transfer 方法也有第二次 参数—"preserveForm".如果你设置这个 True, 使用一个声明 如 Server.Transfer("WebForm2.aspx", True), ,现有的查询 串的和任何形式的变量,仍然可以你的网页 正在传输。

例如,如果你WebForm1.aspx有一个文本控制被称为 文本框1和你转移到WebForm2.aspx与preserveForm 参数设定为真实的,你可以检索的价值 原来的页面文本框控制通过引用 Request.Form("TextBox1").

Response.Redirect() 应使用当:

  • 我们要向请求向一些普通HTML网页上我们的服务器或其他一些网络服务器
  • 我们不关心造成额外的往返服务器上的每一个请求
  • 我们不需要保留Query String和形式变量从原来的请求
  • 我们希望我们的用户能够看到新的重新定向的网址,在那里,他向在他的浏览器(并能够签如果其必要的)

Server.Transfer() 应使用当:

  • 我们要转移当前页的请求到另一个。aspx页上相同的服务器
  • 我们希望保留服务资源和避免不必要的往返服务器
  • 我们希望保留Query String和形式变量(可选)
  • 我们不需要表现出真正的网址,在那里我们重定向请求在用户的网络浏览器

响应。重定向重定向到另一页页面 第一页达到客户。使客户知道重新定向。

服务器。转移退出目前的执行页。客户并不知道重新定向。它可以让你转移的查询串及形式变量。

因此,它取决于你的需要选择哪个更好。

enter image description here

"响应。重定向"和"服务器。传送"有助于转让用户从一个网页到其他网页的同时,页面是执行。但他们这样做转向非常不同。

在情况下你都觉得男人会喜欢看示范,而不是理论我将建议见下facebook视频这可以解释的差别在一个更多的示范方式。

https://www.facebook.com/photo.php?v=762186150488997

它们之间的主要区别是不会转移。在"反应。重定向"传送是通过浏览器而在"服务器。转移"这是通过服务器。让我们试着去了解这个声明在一个更详细的方式。

在"服务器。转移"以下是该序列的转让情况:-

1.用户发出一个请求ASP.NET 页。在下面的图的请求发送给"WebForm1"我们想要浏览"Webform2".

2.服务器开始执行"Webform1"生命周期的本页开始。但在此之前的整个生命周期的页面是完成了"服务器。转让"发生"WebForm2".

3."Webform2"页面,目的是创建全页生命周期的执行和输出响应HTML然后被送到浏览器。

enter image description here

同时,在"反应。重定向"下列事件为导航:-

1.客户(浏览器)发送请求的一页。在下面的图的请求发送给"WebForm1"我们想要浏览"Webform2".

2.生命周期"Webform1"开始执行。但在之间的寿命周期"的反应。重定向"发生。

3.现在,而不是服务器做了重新定向他发送HTTP302命令的浏览器。该命令告诉浏览器,他已经发起一个得到请求"Webform2.aspx"页面。

4.浏览器解释302命令并且发送一个得到请求"Webform2.aspx")。

enter image description here

换句话说"服务器。转移"是由执行服务器的同时,"反应。重定向"执行由苏浏览器。"响应。重定向"需要两个要求做到一个重新定向的网页。

因此,当使用"服务器。转移"和当使用"反应。重定向"?

使用"服务器。转让"的时候你想要浏览的网页,其位于同一服务器上,使用"反应。重定向"当你想要浏览页面之间存在不同的服务和领域。

enter image description here

下面是一个摘要表,它粉笔出的差异,并在其方案中使用。

enter image description here

美丽的服务器。转让是可以做什么与它:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

你可以得到任何你以前的网页使用上述方法只要你使用服务器。转移,但没有响应。重定向

此外,ScarletGarden的评论,还需要考虑的影响的搜索引擎和重定向。具有这一页永久移动?暂时?它使一个区别。

参见: 响应。重定向与"301永久移动":

我们都用于响应。在重定向 一次或另一种。这是快速 简便的方法来获得指出的访客 在正确的方向,如果它们在某种程度上 结束了在错误的地方。但你有没有 知道,响应。重定向发送一个 HTTP响应的状况代码"302 发现"的时候,你可能真的想要 发送"301永久转移"?

的区别看起来很小,但在 某些情况下,它实际上可以做一个 大差异。例如,如果您 使用"301永久移动"的反应 代码,大多数的搜索引擎将删除 过时的链接,从他们的指数和 更换新的。如果你 使用"302找到",他们会继续 回到老的页面...

转让完全服务器的一侧。客户的地址栏保持不变。一些复杂性有关的转让方面之间的请求。冲洗和重新网页的处理程序可能是昂贵的,所以做你的传输早期中的管道如在HttpModule在BeginRequest.读MSDN docs仔细,试验和了解的新的价值观的HttpContext.请求-特别是在回发方案。我们通常使用的服务器。传递错误的情况。

重定向终止要求有一个302状况和客户端的往返响应和国内吃一个例外(未成年服务器的性能打-取决于如何很多你做的一天)客户然后导航到新的地址。浏览器的地址栏和历史更新等等。客户支付费用的一个额外的往返费用变化取决于延迟。在我们的业务中,我们重定向 很多 我们写我们自己的模块,以避免的例外成本。

响应。重定向是更昂贵,因为它增加了额外的旅行服务器找出哪里去了。

服务器。转移是更有效的但是它可以是一个小误导的用户由于Url没有物理上的变化。

以我的经验,在性能上的差别尚未达到足以使用后一方法

有许多差异,正如上面所指明的。除了上述所有,还有一个差异。 Response.Redirect() 可以被用来向用户的任何网页,其中不应用程序的一部分但是 Server.Transfer() 只能用来向用户应用程序内。

//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");

服务器。转移并不能改变URL在客户浏览器,以便有效地浏览器不会知道你改变到另一个服务器的端处理程序。响应。重定向会告诉浏览器移到一个不同的网页,使该网址在标题栏的变化。

服务器。转让是稍微快一点,因为它避免了一个往返服务器,而非改变的url可能是好的或坏的,这取决于你想要什么做的。

响应。重定向: 告诉浏览器的请求的网页,可以发现在一个新的位置。然后浏览器发起的另一个请求的新网页载入其内容。这种结果在两个请求通过浏览器。

服务器。传输: 它转移执行从第一页到第二页,在服务器上。如浏览器中的客户感到关切的是,这一请求,并初次页面是一个回应内容。这种方法的好处是一个小的圆的旅行服务器从客户浏览器。此外,任何发布的形式变量和查询串的参数可用于第二页。

只是更多的细节,关于转移(),它实际上是服务器。执行()+响应。End(),其源代码如下(从单/.净4.0):

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

并为执行(),它是什么运行的 处理程序 给出路,看到的

ASP.NET 不验证当前用户被授权查看的资源交付 执行 法。虽然ASP.NET 授权和验证的逻辑运行之前所原有的资源处理程序是所谓,ASP.NET 直接调用的处理程序指示 执行 方法并不重新认证和授权逻辑为新的资源。如果应用程序的安全政策要求客户要有适当的授权访问的资源,应用程序应力重新授权或提供一个定制的访问控制机制。

你可以武力重新授权使用 重定向 方法,而不是的 执行 法。 重定向 执行客户的侧重定向在其浏览器的要求的新的资源。因为这个重定是一个新的请求进入系统,它受到的所有认证和授权逻辑的两个互联网信息服务(IIS)和ASP.NET 安全政策。

-从MSDN

响应。重定向涉及一个额外的轮旅行和更新地址栏。

服务器。转移不会导致地址栏改变,服务器响应请求的内容从另一页

例如

响应。重定向:-

  1. 对客户的要求浏览一个页面 http://InitiallyRequestedPage.aspx
  2. 在服务器上响应请求与302通过重新定向的地址 http://AnotherPage.aspx.
  3. 在客户浏览器使的第二个要求的地址 http://AnotherPage.aspx.
  4. 在服务器上应有的内容 http://AnotherPage.aspx

服务器。传输:-

  1. 在客户要求浏览一个页面 http://InitiallyRequestedPage.aspx
  2. 服务器上的服务器。转移到 http://AnotherPage.aspx
  3. 在服务器上的回应的请求 http://InitiallyRequestedPage.aspx 通过后的内容 http://AnotherPage.aspx

响应。重定向

赞成:- 宁静的-它改变地址栏,地址可以用来记录的更改的国家间请求。

缺点:- 缓慢有一个额外的往返之间的客户和服务器。这可能是昂贵的,当有大量的延迟之间的客户和服务器。

服务器。转移

赞成:- 快。

缺点:- 国家失去了-如果你使用的服务器。传改变的国家的应用在应对后背、如果页面,然后重新装载,国家就会丧失,如地址栏将是相同的,因为它是在第一次请求。

响应。重定向 响应。Redirect()会送你去一个新的网页,更新地址栏,添加以浏览器的历史。浏览器上,你可以点击返回。它请求重定向到一些普通HTML网页上我们的服务器或其他一些网络服务器。它会导致额外的往返服务器上的每一请求。它没有保留Query String和形式变量从原来的请求。它使得能够看到新的重新定向的网址,这是向浏览器中的(并以书签,如果它的需要)。响应。重定向简单地发送信息到(HTTP302)浏览器。

服务器。转移 服务器。转移()不改变地址吧,我们不能回击。一个应用服务器。转移()时,他/她不想用户看见他在哪里去。某个时候在"装载"类页。它转移目前的页面请求到另一个。aspx页上相同的服务器。它保留了服务器的资源并避免不必要的往返服务器。它保留了查询串及形式变量(可选).它并不显示的真实网址,它将请求在用户的网络浏览器。服务器。转移会发生而不知道任何浏览器,浏览器的要求的一页,但是服务器返回的内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top