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