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

.NET Core 5中如何读取Content-Type为image/svg+xml的响应内容

解决.NET Core 5中HttpClient读取SVG响应的问题

问题根源

你错误地使用了ReadFromJsonAsync<ChartsDO>()去解析SVG格式的响应,该方法仅适用于JSON类型的响应,而接口返回的是image/svg+xml格式的文本内容,因此执行失败。

修正方案

1. 调整响应读取方式

改用ReadAsStringAsync()直接读取SVG的文本内容,而非尝试反序列化为JSON对象。

2. 优化请求体构造(可选但推荐)

原代码中PostAsJsonAsync传入JsonSerializer.Deserialize<object>(requestBody)会做多余的序列化/反序列化操作,若requestBody本身是JSON字符串,直接使用StringContent传递更高效。

修改后的完整代码示例

using System.Net.Http.Headers;
using System.Text;

// 设置Accept头部为SVG格式
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/svg+xml"));

// 构造请求体(requestBody为JSON字符串时)
var requestContent = new StringContent(requestBody, Encoding.UTF8, "application/json");
var responseMessage = await _httpClient.PostAsync(_url, requestContent, cancellationToken);

// 确保请求成功(状态码2xx)
responseMessage.EnsureSuccessStatusCode();

// 读取SVG文本内容
var svgContent = await responseMessage.Content.ReadAsStringAsync();

// 示例:将SVG内容保存为文件
await File.WriteAllTextAsync("output.svg", svgContent, cancellationToken);

关键说明

  • ReadAsStringAsync():适用于读取文本类响应(如SVG、XML、HTML等),直接获取原始内容。
  • EnsureSuccessStatusCode():请求返回非2xx状态码时会抛出HttpRequestException,便于快速定位请求错误。
  • 请求体优化:避免不必要的JSON序列化操作,减少性能损耗和潜在的格式问题。

内容的提问来源于stack exchange,提问作者Kibria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:20:29