.NET 6最小API调用返回200但响应内容为空,Postman正常
问题:.NET 6 Minimal API 经 HttpClient 调用后返回 WebExceptionWrapperStream 无法获取正常内容
服务端代码(.NET 6 Minimal API)
app.MapGet("/", () => { return $"{{\"error\":\"0\", \"message\":\"\", \"rows\":\"0\", \"data\":\"It is working !\"}}"; });
客户端代码
using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri($"{(Properties.Settings.Default.use_https ? "https://" : "http://")}{Properties.Settings.Default.server_address}:Properties.Settings.Default.server_port}/"); HttpResponseMessage response = await httpClient.GetAsync("");
问题现象
调用后response.Content的内部信息如下:
{System.Net.Http.StreamContent} Headers: {Content-Type: text/plain; charset=utf-8 } IsBuffered: true bufferSize: 4096 bufferedContent: {System.Net.Http.HttpContent.LimitMemoryStream} canCalculateLength: false content: {System.Net.Http.HttpClientHandler.WebExceptionWrapperStream} contentConsumed: true contentReadStream: null disposed: false headers: {Content-Type: text/plain; charset=utf-8 } start: 0
使用 Postman 调用http://localhost:5400/的 GET 接口可正常返回 JSON 结果:{"error":"0", "message":"", "rows":"0", "data":"It is working !"},怀疑问题与System.Net.Http.HttpClientHandler.WebExceptionWrapperStream相关。
解决方案
1. 修复客户端 BaseAddress 拼接错误
客户端代码中 BaseAddress 的字符串拼接存在语法错误,Properties.Settings.Default.server_port未被正确解析为变量,导致 URI 格式无效,这是引发 WebExceptionWrapperStream 的核心原因:
// 错误代码 httpClient.BaseAddress = new Uri($"{(Properties.Settings.Default.use_https ? "https://" : "http://")}{Properties.Settings.Default.server_address}:Properties.Settings.Default.server_port}/"); // 修正后代码 httpClient.BaseAddress = new Uri($"{(Properties.Settings.Default.use_https ? "https://" : "http://")}{Properties.Settings.Default.server_address}:{Properties.Settings.Default.server_port}/");
需在server_port前添加{,确保变量被正确插入到 URI 字符串中。
2. 正确读取响应内容
即使 BaseAddress 正确,也需显式调用读取方法获取响应内容,而非直接查看response.Content的内部属性:
HttpResponseMessage response = await httpClient.GetAsync(""); // 确保请求未返回错误状态码 response.EnsureSuccessStatusCode(); // 将响应内容读取为字符串 string content = await response.Content.ReadAsStringAsync(); // 如需反序列化为对象,可使用 System.Text.Json var result = System.Text.Json.JsonSerializer.Deserialize<YourResultModel>(content);
3. 服务端响应格式优化(可选)
当前服务端直接返回字符串,框架默认将其识别为text/plain类型,建议直接返回匿名对象,让框架自动处理 JSON 序列化,响应头会自动设置为application/json:
app.MapGet("/", () => { return new { error = "0", message = "", rows = "0", data = "It is working !" }; });
内容的提问来源于stack exchange,提问作者Srikanth S
相关产品推荐
相关产品推荐

