我目前正在使用此脚本来获取HTTP响应标头。
public static List<string> GetHttpResponseHeaders(string url)
{
List<string> headers = new List<string>();
WebRequest webRequest = HttpWebRequest.Create(url);
using (WebResponse webResponse = webRequest.GetResponse())
{
headers.Add("Status Code: " + (int) ((HttpWebResponse) webResponse).StatusCode);
}
return headers;
}
具体来说,Status Code:
是我感兴趣的。据说,StatusCode()
实际上并没有返回“状态代码”,并且在成功请求时,它只返回{ {1}}而不是OK
。
有没有办法强制它返回实际代码而不是描述?
答案 0 :(得分:5)
话虽如此,看起来StatusCode()实际上并没有返回“状态代码”,并且在成功请求时,它只返回OK而不是200.
不,它返回HttpStatusCode
枚举值。如果您对具有名称的枚举值调用ToString
,则会返回名称。
避免这种情况的最简单方法就是将其强制转换为int
:
headers.Add("Status Code: " + (int) ((HttpWebResponse) webResponse).StatusCode);
或者为了使块的其余部分更清洁,请将响应转换一次:
using (WebResponse webResponse = webRequest.GetResponse())
{
var httpResponse = (HttpWebResponse) webResponse;
headers.Add("URL: " + url);
headers.Add("Status Code: " + (int) httpResponse.StatusCode);
headers.Add("Status Description: " + httpResponse.StatusDescription + "\n");
}
(请注意,当您使用字符串连接时,如果需要,将隐式调用ToString
- 并且永远不值得调用已经是字符串的StatusDescription
之类的内容。)
答案 1 :(得分:2)
StatusCode
是HttpStatusCode
enum。
您可以将其投射到int
以获取基础值。
答案 2 :(得分:0)
您看到“OK”值的原因是因为属性HttpWebResponse.StatusCode
的类型为HttpStatusCode
- 枚举。在枚举上调用.ToString()
将为您提供文本,而不是数字。
因此,当您没有看到状态代码的数值时,您会看到状态代码的表示,而不是状态描述。
如果您需要整数值,可以将枚举转换为int
(HttpStatusCode.OK
确实具有值200
) - 但值得考虑的是,无法保证枚举的整数值将与状态代码值对齐。