【问题标题】:Correct way to use Response.Redirect使用 Response.Redirect 的正确方法
【发布时间】:2016-05-18 08:55:11
【问题描述】:

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

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

发生了什么:

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

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

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

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

尽管使用了看似正确的方法,但我的第三方告诉我,我们收到的重定向失败率很高。在代码树的较高位置,有很多错误捕获,所以当它到达这一点时,它应该是简单重定向的情况。

我知道这可能不会全部结束,并且已经请求了一些模式数据来确定它发生的“谁”和“何时”。

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

  1. 上述方法有什么根本错误吗?
  2. 是否可以使用更好的方法?
  3. 有什么我可以/应该测试的东西

提前致谢。

【问题讨论】:

  • 您传递给重定向请求的 url 似乎存在问题,而不是重定向请求本身。如果您确定从 Web 服务传递了正确的 url,那么这似乎是第 3 方的问题。
  • 你需要Context.ApplicationInstance.CompleteRequest();称呼?试试没有那个可能吗?我看不出你在做什么真的有什么问题。我的猜测是问题在他们的最后。
  • @anothershrubery - 我只是在检查以确保它是有效的 Uri - 我知道它本身不会阻止您描述的问题,但它会过滤掉任何格式错误的 url。
  • @TerryDelahunt - 我们根据遇到类似问题的其他帖子更新了重定向代码 - 在我们的案例中,它似乎没有添加任何内容。

标签: c# asp.net response.redirect


【解决方案1】:

使用此代码

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我当然可以试一试。
    • 避免Server.Transfer Server Transfer 所做的就是给您带来更多的问题和难以处理的页面。您必须在极少数情况下使用它,您绝对知道自己在做什么并且别无选择。 (在任何情况下@JohnOhara 测试,你明白我的意思......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2015-12-17
    • 2012-02-23
    • 2013-01-09
    • 2010-12-28
    相关资源
    最近更新 更多