【问题标题】:Get http status code after redirect in asp.net在asp.net中重定向后获取http状态码
【发布时间】:2013-10-02 08:18:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 但我在某些网站上看到,重定向后记录 200 OK 或其他代码
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      好吧,这可能不是完美的解决方案,但在我的书中它肯定是一个可以接受的解决方法。这里的想法是,您可以确定给定 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-26
        • 1970-01-01
        • 2012-01-09
        • 2012-01-30
        • 1970-01-01
        相关资源
        最近更新 更多