.Net Core中Content.ReadAsStringAsync获取字符串带多余引号如何解决
问题根因
你拿到的"\"TEST\""不是代码读取出错,是两边展示逻辑不一致导致的:
- Postman会自动对
application/json类型的响应做反序列化后可视化展示,你看到的"TEST"是处理后的结果,不是HTTP原始报文内容 ReadAsStringAsync()读取的是未做任何处理的HTTP原始响应文本:当WebAPI返回值本身是string类型、且响应格式为JSON时,按照JSON语法规范,字符串值必须用双引号包裹,所以原始报文内容就是"TEST";C#调试器展示字符串对象时,会把字符串边界的引号、内部转义符都显示出来,最终就呈现为你看到的"\"TEST\""。

解决方法
推荐方案:用标准JSON反序列化处理
不要手动写字符串替换逻辑删引号/反斜杠,用JSON库反序列化是最稳妥的方案,不会误删内容本身带的合法引号:
// 如果你用.NET内置的System.Text.Json string rawContent = await response.Content.ReadAsStringAsync(); string targetResult = JsonSerializer.Deserialize<string>(rawContent); // 如果你用Newtonsoft.Json(Json.NET) // string targetResult = JsonConvert.DeserializeObject<string>(rawContent);
执行后targetResult就是你预期的无多余字符的TEST。
临时方案:手动裁剪首尾引号
如果确定返回内容不会在首尾出现和业务相关的双引号,也可以直接裁剪首尾的包裹引号:
string rawContent = await response.Content.ReadAsStringAsync(); string targetResult = rawContent.Trim('"');
注意事项
尽量不要直接用.Result调用异步方法,在有同步上下文的场景(比如WinForm、WPF、旧版ASP.NET)很容易引发线程死锁,推荐用await关键字获取异步结果。
内容的提问来源于stack exchange,提问作者Keerthi
相关产品推荐
相关产品推荐

