.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
相关产品推荐
相关产品推荐

