【问题标题】:Response.Redirect with endResponse = false doesn't redirect immediately带有 endResponse = false 的 Response.Redirect 不会立即重定向
【发布时间】:2014-07-10 14:38:43
【问题描述】:

我有一个执行长时间运行过程的按钮,所以我想重定向到成功页面,直到过程完成,这里是一个代码示例:

Response.Redirect("Page_URL", false);
Thread.Sleep(100000);

问题:页面不会立即重定向,它会等待 100 秒然后重定向。

有什么想法吗?

【问题讨论】:

    标签: asp.net redirect webforms response.redirect


    【解决方案1】:

    第二个参数如果设置为true,会立即结束响应并重定向。 True 将导致在重定向之后不再执行任何代码,但由于您将其设置为 false,其余代码将执行,然后重定向将发生,这就是您遇到延迟的原因。更多信息请见MSDN

    当您在页面处理程序中使用此方法终止对 一页并开始对另一页的新请求,将 endResponse 设置为 false 然后调用 CompleteRequest 方法。如果您指定 true 对于 endResponse 参数,此方法调用 End 方法 引发 ThreadAbortException 异常的原始请求 当它完成时。此异常对 Web 有不利影响 应用程序性能,这就是为什么为 推荐使用 endResponse 参数。有关详细信息,请参阅 结束方法。

    如果您希望在长流程之后发生重定向,您应该设置一些东西以在流程完成时触发重定向,例如通过 ajax 调用执行长流程并轮询进度然后重定向。

    【讨论】:

      【解决方案2】:

      让长进程在不同的线程上工作,然后它会立即重定向。

      或者,您可以使用 ajax 并向用户显示进度,然后重定向到成功页面(如果长时间的过程失败并且您不希望您的用户看到失败的成功消息,这将很有帮助)

      【讨论】:

      • 这是我以前用过的一种技术。如果使用较新的 .net 框架,那么 Task.Run 是您的朋友。该代码将在您的页面重定向时运行。
      • 好的,我将使用TasksThreads,我误解了EndResponse 的工作原理,谢谢。
      【解决方案3】:

      这段代码成功了。

       Response.Redirect(“Page_URL”, false);
      
       var t = Task.Factory.StartNew(() =>
      
                                  {
      
                                      // your code here
      
                                  });
      

       

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 2011-05-05
        • 1970-01-01
        • 2013-01-06
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        相关资源
        最近更新 更多