在Response.Redirect中使用endResponse

时间:2009-06-03 20:56:34

标签: asp.net

在ASP.NET页面中执行response.redirect时,收到错误:
错误:无法获得价值
传递的两个变量(一个值是从查询字符串中检索的,另一个是从viewstate中检索的)

我之前从未见过这个错误,所以我做了一些调查,发现建议使用“endResponse”的“False”值

例如Response.Redirect(“mypage.aspx”,False)

这很有效。

我的问题是:在response.redirect中对“endResponse”值使用“False”有什么副作用?
即服务器的缓存是否有任何影响?页面是否在一段时间内保留在内存中?它会影响查看同一页面的不同用户吗?等等

谢谢!

3 个答案:

答案 0 :(得分:14)

this other questionthis blog post,推荐的模式是 -

Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

这避免了昂贵的ThreadAbortException / Response.End。有些代码将在CompleteRequest()之后执行,但ASP.Net会在方便时立即关闭请求。

编辑 - 我认为this answer提供了最佳概述。请注意,如果您使用上述模式,重定向后的代码仍将执行。

答案 1 :(得分:2)

可能会回答您问题的MSDN blog post

  

使用[Response.Redirect(url,false)]的缺点是页面将继续在服务器上处理并发送到客户端。如果您正在Page_Init(或类似)中进行重定向并调用Response.Redirect(url,false),则页面将仅在当前页面执行完毕后重定向。这意味着您在该页面上执行的任何服务器端处理都将被执行。

答案 2 :(得分:1)

Response.Redirect(...,true)导致ThreadAbortException。 根据您的异常处理设置,您可能会在每次重定向时为您的日志填充错误消息。