正确使用方法 Response.Redirect

Correct way to use Response.Redirect

我遇到了 Response.Redirect 的问题,尽管阅读了大量帖子,但我仍无法解决我的特定问题。

我正在使用的网站通过网络服务与第三方集成。 Web 服务 returns 的结果符合预期,之后我们做了一些内务处理,然后重定向到第三方提供的 url。

情况如下:

如果我们收到特定的回复,我们希望通过回复中提供的 link 重定向到附属网站

  1. 我们发出请求并收到响应
  2. 我们更新数据库SQL
  3. 我们使用 System.Net 发送
  4. 发送电子邮件

经过以上,我们要重定向;

Response.Redirect(resp.RedirectUrl, false);
Context.ApplicationInstance.CompleteRequest();

尽管使用的方法似乎是正确的,但我的第三方通知我,我们收到的失败重定向比例很高。在代码树的更高层,有很多错误捕获,所以当它到达这一点时,应该是简单重定向的情况。

我知道这可能不是我们的全部,并且已经请求了一些模式数据来确定 'who' 和 'when' 它正在发生。

与此同时,我正在努力确保我们这边尽可能稳健,所以我有几个问题。

  1. 上述方法有什么根本性的错误吗?
  2. 是否可以使用更好的方法?
  3. 有什么我could/should正在测试的

提前致谢。

由于目标 URL 是从第三方收到的,将它们保存在数据库中之后。你可以使用 'Sever.Transfer' 而不是 'Response.Redirect'.

Response.Redirect会造成往返,因此会有延迟。

目标 URL 将由不同的 domain/Web 服务器处理,而不是来自您的应用程序服务器。

因此 Server.Transfer 将是此重定向操作的最佳选择。

使用此代码

Response.Redirect(resp.RedirectUrl, false);
Context.ApplicationInstance.CompleteRequest();

你让你的网站 运行 和其他代码(其余部分在线和页面的生命周期事件)可能没有经过测试(因为你相信那不是 运行 和重定向)或者可能有一些空值,你会得到异常 - 在实际重定向之前 运行s 的代码上。

尝试使用该代码,停止进一步执行您的程序

Response.Redirect(resp.RedirectUrl, false);
return;

这样你会得到一个 ThreadAbortException 异常,但你需要进一步停止 运行 你的程序并控制停止。

亲戚 Redirect to a page with endResponse to true VS CompleteRequest and security thread