在C#中获取HTTP状态代码

时间:2017-07-03 02:58:59

标签: c# http web error-handling http-status-codes

如果这是一个明显的,愚蠢的或以前回答过的问题,我道歉...但我现在一直在寻找答案几个小时,并且找不到任何可以帮助我的事。

我正在编写一个生成随机字符串的简单应用程序,然后将该字符串附加到图像托管网站的URL上 - 这个想法是一种图像轮盘赌。我使用以下函数验证图像是否存在:

private bool ImgVerifier(string url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = WebRequestMethods.Http.Head;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            int statusCode = (int)response.StatusCode;

            if (statusCode == 302)
            {
                MessageBox.Show("Status: " + response.StatusCode.ToString() + " at URL: " + url);
                response.Close();
                return false;
            }
            else
            {
                MessageBox.Show("Status: " + response.StatusCode.ToString() + " at URL: " + url);
                response.Close();
                return true;
            }
        }

我遇到的问题是,除了HTTP" OK"状态。检查SeoBook Server Header Checker网站上的图片网址时,它会将该网页报告为302错误。

2 个答案:

答案 0 :(得分:0)

302是HTTP重定向(不是错误)。您正在使用的组件会自动跟随重定向。默认情况下,HttpWebRequest.AllowAutoRedirect 为true,这就是为什么只有在成功执行重定向后才能看到OK的最终结果。

答案 1 :(得分:0)

HttpWebRequest引发许多HTTP错误的异常。因此,您的代码永远不会到达int statusCode = (int)response.StatusCode;。要获取这些错误,请将代码包装在try...catch中并检查WebException.Status属性。

如果是302,HttpWebRequest会重定向到新页面。如果将AllowAutoRedirect属性设置为false,则所有HTTP状态代码为300到399的响应都将返回给应用程序。