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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:20:32