在asp.net中重定向后获取http状态代码

时间:2013-10-02 08:18:52

标签: c# asp.net redirect response.redirect

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

3 个答案:

答案 0 :(得分:0)

你做不到。您将访问者的浏览器重定向到其他URL。如果该URL未指向您控制的服务器,则无法查看该请求的执行情况。

答案 1 :(得分:0)

当您编写Response.Redirect(...)时,这会导致您的网站将HTTP 302(已移动)发送回客户端浏览器......就您的服务器而言,这就是故事的结尾 - 与客户端已关闭,您不再与他们互动。

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

我能看到你以任何半美的方式检查这个问题的唯一方法是,通过发出自己的HTTP GET,代表客户端首先在您自己的代码中的进行检查对于重定向位置...但是在您选中时,它仍然只会告诉您对您的远程资源。

但是你仍然不可能说基于你获得HTTP 200,客户端也能够访问它(防火墙,连接不良,黑名单,抛开现在你把请求加载加倍的问题)在那个远程资源上...)说实话我不建议甚至打扰这样做,因为它不是100%可靠的方法。

答案 2 :(得分: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;
    }
}