0

当我们重定向到另一个页面(例如到其他网站的页面)时,服务器响应带有 http 状态码。如果一切正常,则返回 200。
当我调用时,Response.Redirect如何检测从远程服务器返回的 http 状态代码?
我想登录数据库重定向是否正确执行。

4

3 回答 3

0

你不能。您将访问者的浏览器重定向到不同的 URL。如果该 URL 未指向您控制的服务器,则您无法看到该请求是如何进行的。

于 2013-10-02T08:22:34.167 回答
0

好的,这可能不是完美的解决方案,但在我的书中它肯定是一个可以接受的解决方法。这里的想法是您可以确定给定 URL 的预期 HttpStatusCode 应该是什么。

public HttpStatusCode GetRedirectStatusCode(string destinationUrl)
{
    var request = (HttpWebRequest)WebRequest.Create(destinationUrl);
    request.Method = "HEAD";
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;
    request.Timeout = 180000;

    using(var response = (HttpWebResponse)request.GetResponse())
    {
        return response.StatusCode;
    }
}
于 2013-10-02T10:51:41.950 回答
0

当您编写Response.Redirect(...)此代码时,您的站点会将 HTTP 302(已移动)发送回客户端浏览器……就您的服务器而言,这就是故事的结尾 - 与客户端的连接已关闭,您没有与他们进行更多的互动。

您根本无法检测到客户端浏览器随后加载了您的 302 指示的资源,除非该资源恰好位于您自己的服务器上 - 在您的情况下,它不是。

我可以看到您以任何半有意义的方式检查这一点的唯一方法是,如果您首先在您自己的代码中通过为重定向位置发出您自己的 HTTP GET 来代表客户端进行检查......但这仍然仅告诉您在您检查时远程资源对您可用。

但是您仍然不可能说基于您获得 HTTP 200 客户端也能够访问它(防火墙、连接不良、列入黑名单,撇开现在您将请求负载加倍的问题放在那个远程资源..)老实说,我什至不建议这样做,因为它不是 100% 可靠的方法。

于 2013-10-02T09:59:56.433 回答