【问题标题】:Using endResponse in a Response.Redirect在 Response.Redirect 中使用 endResponse
【发布时间】:2010-10-31 03:18:33
【问题描述】:

在 ASP.NET 页面中执行 response.redirect 时,我收到以下错误:
错误:无法获取值
对于传入的两个变量(一个值从查询字符串中检索,另一个从视图状态中检索)

我以前从未见过此错误,因此我进行了一些调查并发现建议将“假”值用于“endResponse”

例如Response.Redirect("mypage.aspx", False)

这行得通。

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

谢谢!

【问题讨论】:

标签: asp.net


【解决方案1】:

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

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

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

编辑-我认为this answer 给出了最好的概述。注意,如果你使用上面的模式,重定向之后的代码仍然会被执行。

【讨论】:

  • 很好的答案!正是我想要的。
  • 请记住,由于请求将完成,许多不必要的 KB 的 HTML 可能仍会发送给用户。根据您的代码,他们将收到该页面的所有 HTML(他们永远不会看到),然后是他们被重定向到的下一页的所有 HTML。
  • 我刚刚开始将我的旧 ASP.NET 2.0 项目转换为支持 Web 表单的 MVC 5,并且有 100 个页面使用了 Response.Redirect("url"),是有什么办法可以全局设置 endResponse 为 false,而不是修改所有年龄?
  • @MokshShah - 我不这么认为。在您的情况下,我会考虑对 Response.Redirect 进行全局搜索并将其替换为 MySafeRedirect 函数,并在那里设置结束响应。
  • 如果Context 无法为您解决问题,请尝试HttpContext
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多