You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:54:08