【问题标题】:How to use ASP.NET with "Redirect after POST" pattern? [Edited]如何使用带有“POST 后重定向”模式的 ASP.NET? [已编辑]
【发布时间】:2011-04-03 06:58:10
【问题描述】:

我第一次尝试在 ASP.NET 中实现 Redirect After Post。假设我的业务对象可能需要几秒到一分钟才能完成,我应该以什么顺序以及使用什么语法?

例如:

  1. 用户 POST 的

  2. 服务器问题 Server.Transfer 或 Response.Redirect

  3. 服务器执行需要一两分钟 Thread.Sleep 的操作

处理这种情况的最佳方法是什么?

【问题讨论】:

  • 你想让用户知道他提交的结果,以防万一失败?
  • @Nathan Taylor:不是重复的......虽然这很有帮助,但似乎我需要 Response.Redirect 在“发布后重定向”模式中,但我不确定步骤?我不应该用#3 反转#2 吗?我只是假设这是正确的顺序

标签: asp.net web-applications post redirect


【解决方案1】:

在这种情况下,最好还是坚持使用Response.Redirect(),以便向用户的客户端发出重定向,而不是使用Server.Transfer(),后者执行纯粹的服务器端重定向到不同的上下文。

对于需要用户等待的进程,您可能希望使用某种异步实现,将耗时的操作放在后台线程中;同时,用户无需在空白加载屏幕上等待,而是将Response.Redirect() 提供给“处理”页面,该页面轮询服务器以完成当前操作并更新用户。为了增加润色,考虑实现类似 Facebook 的图像上传器,它会在用户继续正常使用网站的同时覆盖屏幕角落的进度条。

【讨论】:

  • 你对我如何添加这种润色剂有什么建议吗? javascript 是否只是轮询 WCF 服务(或等价物)?
  • 确切地说,服务器会有某种网络方法来检索当前执行进程的进度并将其返回给 JavaScript。从那里 JavaScript 将简单地相应地更新其进度条。您可以使用 JavaScript setInterval() 指示客户端每隔几秒轮询一次服务器以获取当前进度。 This answer to another question有一个how to implement a polling process with JavaScript的例子。
  • 最后,将 bizlogic 放在重定向之后以避免重复提交是否有意义?似乎有可能发生......
  • @Maker 业务逻辑的位置(重定向之前或之后)不会阻止双重提交,因为无论哪种方式,当用户重新发布数据时,它仍然会调用相同的服务器端逻辑。 This answer 很好地解释了如何防止重复提交,如果它们在您的场景中是一个有效的问题。
【解决方案2】:

据我所知你需要做的:

  1. 用户 POST 表单到服务器脚本
  2. 服务器使用 Thread.Sleep 做一些需要一两分钟的事情
  3. 服务器发出 Response.Redirect

但是,这里的明显缺点是用户在服务器执行某些工作时一直在等待(两分钟是一个很长的延迟时间,他们很可能会认为出现问题),并且您可能会遇到 HTTP 请求浏览器超时。

就代码而言,它非常简单:

  1. 这是一个标准的<FORM METHOD="POST"> 代码
  2. 做任何你需要做的事,现在看不出你为什么需要 Thread.Sleep;您不想在服务器端处理完成后立即进行重定向吗?
  3. 调用Response.Redirect("mypage.aspx") 执行GET

这有帮助吗?

【讨论】:

  • Huggil Thread.Sleep 只是模拟一个需要一些时间才能完成的后端进程..
  • 是的,谢谢...无论如何,BizLogic 似乎总是在重定向之前运行。
猜你喜欢
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2016-01-06
相关资源
最近更新 更多