[英]Flutter-Framework, C# http server and an invalid JSON-Header s Invalid response status code
[英]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
,它将返回名称。
避免这种情况的最简单方法就是将其int
为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
这样已经是字符串的东西。)
StatusCode
是一个HttpStatusCode
枚举 。
您可以将其int
转换为int
以获取基础值。
您看到值“OK”的原因是因为属性HttpWebResponse.StatusCode
的类型为HttpStatusCode
- 枚举。 在枚举上调用.ToString()
将为您提供文本,而不是数字。
因此,当您没有看到状态代码的数值时,您会看到状态代码的表示,而不是状态描述。
如果需要整数值,可以将枚举转换为int
( HttpStatusCode.OK
的值确实为200
) - 但值得考虑的是,无法保证枚举的整数值与状态代码值对齐。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.