C#请求接口返回内容丢失XML标签仅保留值,如何获取带标签的完整数据?
解决方案
排查步骤
- 先删除错误的请求头:你当前是GET请求,没有请求体,不需要设置
Content-Type、Content-Encoding两个请求头,这两个头是用来标识请求体的格式和压缩规则的,错误的头参数会导致服务端返回格式异常。 - 修正自动解压配置:你只设置了GZip解压,建议加上Deflate,覆盖常见的压缩格式。
- 确认编码匹配:
StreamReader默认用UTF-8编码解析,如果服务端返回的是其他编码(比如GB2312、GBK),会导致解析异常,需要根据响应头里的编码规则初始化流读取器。 - 排除调试工具干扰:Visual Studio调试器查看XML格式字符串时,默认会折叠标签仅展示文本值,你可以将
responseValue输出到文本文件,或者在即时窗口直接打印变量,确认是否真的丢失了标签。
修正后的代码
string url = "https://..../company/list"; string username = "zen"; string req_id = GetTimestamp(DateTime.Now); // 建议对参数做URL编码,避免特殊字符出错 url += $"?username={Uri.EscapeDataString(username)}&req_id={Uri.EscapeDataString(req_id)}"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // 同时支持GZip和Deflate解压 request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.Accept = "application/xml"; request.Method = "GET"; string responseValue = ""; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { // 用响应返回的编码解析内容,避免乱码 Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet); using (StreamReader streamReader = new StreamReader(responseStream, responseEncoding)) { responseValue = streamReader.ReadToEnd(); } } } // 测试:输出到本地文件确认内容 File.WriteAllText(@"C:\test_response.xml", responseValue, Encoding.UTF8);
内容的提问来源于stack exchange,提问作者Zen Kos
相关产品推荐
相关产品推荐

