正确使用Response.Redirect的方法

时间:2016-05-18 08:55:12

标签: c# asp.net response.redirect

我遇到了Response.Redirect的问题,尽管阅读了很多帖子,但我还是无法解决我的特定问题。

我正在开发的网站通过网络服务与第三方集成。 Web服务按预期返回结果,然后我们执行一些内务处理,然后重定向到第三方提供的URL。

以下是发生的事情:

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

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

    在上述之后,我们想要重定向;

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

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

    我知道这可能并非都在我们的最后,并且已经要求一些模式数据来确定它发生在'谁'和'何时'。

    与此同时,我正在努力确保我们的方面尽可能健全,所以我有几个问题。

    1. 上述方法有什么根本原因吗?
    2. 是否可以使用更好的方法?
    3. 有什么我可以/应该测试
    4. 提前致谢。

2 个答案:

答案 0 :(得分:2)

使用此代码

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

你让你的网站运行和其他代码(其余的在线上,其余的在页面的生命周期事件上)可能没有经过测试(因为你认为没有运行和重定向)或者可能有一些空值在那里你得到例外 - 在实际重定向之前运行的代码。

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

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

你得到一个ThreadAbortException例外,但你需要通过一个受控停止来停止进一步运行程序。

相对 Redirect to a page with endResponse to true VS CompleteRequest and security thread

答案 1 :(得分:-1)

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

Response.Redirect可能导致往返,因此会有延迟。

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

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