繁体   English   中英

强制C#的HTTP响应返回状态代码而不是描述

[英]Forcing C#'s HTTP Response to Return a Status Code Instead of a Description

我目前正在使用此脚本来获取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()实际上并没有返回“状态代码”,并且在成功请求时,它只返回OK而不是200

有没有办法强制它返回实际代码而不是描述?

话虽如此,似乎StatusCode()实际上并没有返回“状态代码”,并且在成功请求时,它只返回OK而不是200。

不,它返回一个HttpStatusCode枚举值。 如果在具有名称的枚举值上调用ToString ,它将返回名称。

避免这种情况的最简单方法就是将其intint

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这样已经是字符串的东西。)

StatusCode是一个HttpStatusCode枚举

您可以将其int转换为int以获取基础值。

您看到值“OK”的原因是因为属性HttpWebResponse.StatusCode的类型为HttpStatusCode - 枚举。 在枚举上调用.ToString()将为您提供文本,而不是数字。

因此,当您没有看到状态代码的数值时,您会看到状态代码的表示,而不是状态描述。

如果需要整数值,可以将枚举转换为intHttpStatusCode.OK的值确实为200 ) - 但值得考虑的是,无法保证枚举的整数值与状态代码值对齐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM