当前位置:  开发笔记 > 编程语言 > 正文

Server.Transfer Vs. 的Response.Redirect

如何解决《Server.TransferVs.的Response.Redirect》经验,为你挑选了11个好方法。

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

每个的优点和缺点是什么?

什么时候适合另一个?

什么时候不适合?

CMS.. 227

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

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



1> CMS..:

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

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


嘿发现了.您必须将Server.TransferRequest用于cshtml Web矩阵页面.

2> Christian Pa..:

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

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

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

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



3> TStamper..:

要简短: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逐字复制.如果是来自其他来源,您应该至少引用它.
我说:我找到并同意的东西;
应该链接到源并使用复制部分的引号格式/突出显示.

4> SoftDev..:

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

我们希望将请求重定向到我们服务器上的某些纯HTML页面或其他某个Web服务器

我们不关心在每个请求上导致额外的往返服务器

我们不需要保留原始请求中的查询字符串和表单变量

我们希望我们的用户能够看到他在浏览器中重定向的新重定向URL(如果必要,可以将其加入书签)

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

我们希望将当前页面请求转移到同一服务器上的另一个.aspx页面

我们希望保留服务器资源并避免不必要的往返服务器

我们想保留查询字符串和表单变量(可选)

我们不需要在用户Web浏览器中显示我们重定向请求的真实URL



5> Canavar..:

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

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

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



6> Shivprasad K..:

在此输入图像描述

"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".

在此输入图像描述

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

在此输入图像描述



7> Israel Margu..:

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

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

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



8> Diodeus - Ja..:

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

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

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

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



9> stephbu..:

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

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



10> deadbug..:

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

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

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



11> Microsoft De..:

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

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

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

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有