如何将HttpStatusCode转换为易读字符串(HttpWebResponse场景)
解决HttpStatusCode转指定格式易读字符串的问题
我来帮你搞定这个问题!在使用HttpWebResponse的场景下,因为没有HttpResponseMessage里的ReasonPhrase属性,直接用statusCode.ToString()得到的是无空格的驼峰字符串(比如BadRequest),而且简单的正则拆分还会遇到RequestUriTooLong这种需要特殊处理的反例,这里给你两种靠谱的解决方案:
方案一:手动映射字典(最准确)
因为HttpStatusCode是标准枚举,值是固定的,我们可以提前创建一个字典,把每个枚举值对应到符合要求的易读字符串,包括特殊情况:
// 提前定义全局的状态码映射字典 private static readonly Dictionary<HttpStatusCode, string> _statusCodeReadableMap = new Dictionary<HttpStatusCode, string> { // 常见状态码示例 { HttpStatusCode.OK, "OK" }, { HttpStatusCode.BadRequest, "Bad Request" }, { HttpStatusCode.Unauthorized, "Unauthorized" }, { HttpStatusCode.NotFound, "Not Found" }, { HttpStatusCode.RequestUriTooLong, "Request-Uri Too Long" }, { HttpStatusCode.InternalServerError, "Internal Server Error" }, // 按需补充其他所有需要用到的状态码 }; // 使用示例 HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); HttpStatusCode statusCode = response.StatusCode; // 获取易读字符串,兜底处理未定义的状态码 string readableStatus = _statusCodeReadableMap.TryGetValue(statusCode, out var description) ? description : statusCode.ToString();
这种方法的优势是完全准确,不会出现正则处理的反例问题;缺点是需要手动维护字典,但因为HTTP状态码是标准规范,不会轻易变动,维护成本很低。
方案二:改进正则表达式(更简洁)
如果不想手动维护所有状态码,可以先处理特殊情况,再用正则拆分驼峰格式:
public static string ConvertToReadableStatusCode(HttpStatusCode statusCode) { string codeString = statusCode.ToString(); // 先处理特殊情况:替换RequestUri为Request-Uri codeString = codeString.Replace("RequestUri", "Request-Uri"); // 正则拆分驼峰:在大写字母前添加空格(排除第一个字符) string readableString = Regex.Replace(codeString, @"(?<!^)([A-Z])", " $1").Trim(); return readableString; } // 使用示例 HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); HttpStatusCode statusCode = response.StatusCode; string readableStatus = ConvertToReadableStatusCode(statusCode);
这种方法只需要处理少数特殊的状态码(比如RequestUriTooLong),其余的驼峰格式都能自动拆分,代码更简洁,适合大部分场景。
内容的提问来源于stack exchange,提问作者Vitaliy
相关产品推荐
相关产品推荐

