Server.Transfer Vs. 的Response.Redirect

ked*_*the 259 asp.net redirect server.transfer

Server.Transfer和之间有什么区别Response.Redirect

  • 每个的优点和缺点是什么?
  • 什么时候适合另一个?
  • 什么时候不适合?

CMS*_*CMS 227

Response.Redirect只需将消息(HTTP 302)发送到浏览器即可.

Server.Transfer 在浏览器不知道任何事情的情况下发生,浏览器请求页面,但服务器返回另一个页面的内容.

  • 嘿发现了.您必须将Server.TransferRequest用于cshtml Web矩阵页面. (11认同)

Chr*_*yne 91

Response.Redirect()将发送到新页面,更新地址栏并将其添加到浏览器历史记录中.在浏览器上,您可以单击返回.

Server.Transfer()不会更改地址栏.你不能回击.

我用Server.Transfer()的时候,我不希望用户看到我要去的地方.有时在"加载"类型的页面上.

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


TSt*_*per 73

要简短:Response.Redirect只需告诉浏览器访问另一个页面.Server.Transfer有助于减少服务器请求,保持URL相同,并且通过一些小错误,允许您传输查询字符串和表单变量.

我找到并同意的东西(来源):

Server.Transfer类似的是它将用户发送到另一个页面,其中包含一个语句Server.Transfer("WebForm2.aspx").但是,该声明具有许多明显的优点和缺点.

首先,使用转移到另一个页面 Server.Transfer 节省服务器资源.它不是告诉浏览器重定向,而只是改变Web服务器上的"焦点"并传输请求.这意味着您无法获得尽可能多的HTTP请求,因此可以减轻Web服务器的压力并使您的应用程序运行得更快.

但请注意:因为"转移"过程只能在服务器上运行的那些站点上运行; 您不能用于Server.Transfer将用户发送到外部站点.只能Response.Redirect这样做.

其次,Server.Transfer在浏览器中维护原始URL.这确实有助于简化数据输入技术,尽管在调试时可能会造成混淆.

这不是全部:该Server.Transfer方法还有第二个参数 - "preserveForm".如果将此设置为True,则使用诸如的语句Server.Transfer("WebForm2.aspx", True),现有查询字符串和任何表单变量仍将可用于要传输到的页面.

例如,如果WebForm1.aspx具有名为TextBox1的TextBox控件,并且您将preserveForm参数设置为True,则转移到WebForm2.aspx,您将能够通过引用检索原始页面TextBox控件的值 Request.Form("TextBox1").

  • +1评论,但这似乎从http://www.developer.com/net/asp/article.php/3299641逐字复制.如果是来自其他来源,您应该至少引用它. (10认同)
  • 我说:我找到并同意的东西; (7认同)
  • 应该链接到源并使用复制部分的引号格式/突出显示. (6认同)

Sof*_*Dev 34

Response.Redirect() 应该在以下时间使用:

  • 我们希望将请求重定向到我们服务器上的某些纯HTML页面或其他某个Web服务器
  • 我们不关心在每个请求上导致额外的往返服务器
  • 我们不需要保留原始请求中的查询字符串和表单变量
  • 我们希望我们的用户能够看到他在浏览器中重定向的新重定向URL(如果必要,可以将其加入书签)

Server.Transfer() 应该在以下时间使用:

  • 我们希望将当前页面请求转移到同一服务器上的另一个.aspx页面
  • 我们希望保留服务器资源并避免不必要的往返服务器
  • 我们想保留查询字符串和表单变量(可选)
  • 我们不需要在用户Web浏览器中显示我们重定向请求的真实URL

  • 更清楚的是,对我来说,这更适合作为公认的答案。 (2认同)

Can*_*var 28

第一页到达客户端后, Response.Redirect将页面重定向到另一页面.所以客户端知道重定向.

Server.Transfer退出当前页面执行.客户端不知道重定向.它允许您传输查询字符串和表单变量.

所以这取决于你需要选择哪个更好.


Shi*_*ala 22

在此输入图像描述

"response.redirect"和"server.transfer"有助于在页面执行时将用户从一个页面转移到另一个页面.但他们进行此转移/重定向的方式却截然不同.

如果你是视觉家伙,并希望看到演示而不是理论,我建议看到下面的facebook视频,以更具说明性的方式解释差异.

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

它们之间的主要区别在于转移谁.在"response.redirect"中,传输由浏览器完成,而在"server.transfer"中则由服务器完成.让我们试着更详细地理解这个陈述.

在"Server.Transfer"中,以下是传输发生的顺序: -

1.User向ASP.NET页面发送请求.在下图中,请求被发送到"WebForm1",我们想要导航到"Webform2".

2.Server开始执行"Webform1"并开始页面的生命周期.但在页面的完整生命周期完成之前,"Server.transfer"恰好出现在"WebForm2"中.

3.创建"Webform2"页面对象,执行整页生命周期,然后将输出的HTML响应发送到浏览器.

在此输入图像描述

在"Response.Redirect"中,以下是导航事件的序列: -

1.Client(浏览器)向页面发送请求.在下图中,请求被发送到"WebForm1",我们想要导航到"Webform2".

2."Webform1"的生命周期开始执行.但在生命周期"Response.Redirect"之间发生.

3.现在,他不是在服务器上进行重定向,而是向浏览器发送HTTP 302命令.此命令告诉浏览器他必须向"Webform2.aspx"页面发起GET请求.

4.Browser解释302命令并发送"Webform2.aspx"的GET请求.

在此输入图像描述

换句话说,服务器执行"Server.Transfer",而thr浏览器执行"Response.Redirect"."Response.Redirect"需要两个请求来重定向页面.

那么何时使用"Server.Transfer"以及何时使用"Response.Redirect"?

如果要导航位于同一服务器上的页面,请使用"Server.Transfer",如果要在驻留在不同服务器和域中的页面之间导航,请使用"Response.Redirect".

在此输入图像描述

下面是一个汇总表,其中列出了差异以及使用的场景.

在此输入图像描述


Isr*_*ies 11

Server.Transfer的美妙之处在于它可以用它做什么:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
Run Code Online (Sandbox Code Playgroud)

只要您使用Server.Transfer但不使用Response.Redirect,您可以使用上述方法从上一页获取任何内容


Dio*_*ane 10

除了ScarletGarden的评论之外,您还需要考虑搜索引擎和重定向的影响.此页面是永久移动的吗?暂时?它有所作为.

请参阅:Response.Redirect与"301永久移动":

我们都曾经使用过Response.Redirect.如果访问者以某种方式最终落入错误的位置,这将是让访问者指向正确方向的快捷方式.但是你知道当你真的想要发送"301 Moved Permanently"时,Response.Redirect会发送一个HTTP响应状态代码"302 Found"吗?

区别似乎很小,但在某些情况下,它实际上可以产生很大的不同.例如,如果您使用"301 Moved Permanently"响应代码,大多数搜索引擎将从索引中删除过时的链接并将其替换为新的链接.如果您使用"302 Found",他们将继续返回旧页面...


ste*_*hbu 6

转移完全是服务器端的.客户端地址栏保持不变.关于请求之间的上下文传输的一些复杂性.刷新和重新启动页面处理程序可能很昂贵,因此您需要在管道中尽早进行传输,例如在BeginRequest期间在HttpModule中进行传输.仔细阅读MSDN文档,测试并理解HttpContext.Request的新值 - 尤其是在Postback场景中.我们通常使用Server.Transfer来处理错误情况.

重定向使用302状态和客户端往返响应终止请求,并在内部执行异常(次要服务器性能命中 - 取决于您每天执行的次数)客户端随后导航到新地址.浏览器地址栏和历史记录更新等.客户支付额外往返的费用 - 费用因延迟而异.在我们的业务中,我们重定向很多,我们编写了自己的模块,以避免异常成本.


dea*_*bug 5

Response.Redirect成本更高,因为它增加了额外的服务器之旅,以确定去哪里.

Server.Transfer效率更高,但由于Url没有实际更改,因此可能会对用户造成一些误导.

根据我的经验,性能上的差异并不足以使用后一种方法


Mic*_*per 5

如上所述,有许多差异。最重要的是,还有另外一个区别。Response.Redirect()可以用于将用户重定向到不属于应用程序的任何页面,而Server.Transfer()只能用于将用户重定向到应用程序内。

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

//This will not work.
Server.Transfer("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)