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

.NET Core中如何返回含整数的HttpResponseMessage?

解决.NET Core中返回整数响应适配遗留API的问题

首先,你的问题核心出在写入流后没有重置流的位置,而且其实有更简洁的实现方式,完全不用手动操作MemoryStream和StreamWriter。让我一步步给你拆解分析:

为什么你的原有代码不起作用?

你用StreamWriter把100写入MemoryStream后,流的当前读取位置已经跳到了末尾。当StreamContent去读取这个流时,会从当前位置开始读取,自然拿不到任何内容——接收端的reader.ReadToEnd()得到的是空字符串,Int32.TryParse当然会直接失败。

另外,虽然StreamWriter的using块会自动flush内容到流,但它不会帮你重置流的位置,这是导致问题的关键。

修复方案1:调整你的现有代码

只需要在返回HttpResponseMessage之前,把MemoryStream的位置重置到开头,同时注意让StreamWriter不要关闭流:

using (MemoryStream ms = new MemoryStream())
{
    using (StreamWriter sw = new StreamWriter(ms, leaveOpen: true)) // 设置leaveOpen避免StreamWriter关闭ms
    {
        sw.Write(100);
        sw.Flush(); // 确保内容完全写入流
        ms.Seek(0, SeekOrigin.Begin); // 把流的位置重置到开头
        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StreamContent(ms)
        };
    }
}

修复方案2:用更简洁的StringContent(推荐)

既然你要返回的是字符串形式的整数,直接用StringContent会更简单,完全规避手动操作流的麻烦,行为也和ASP.NET的Request.CreateResponse完全一致:

return new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StringContent("100", System.Text.Encoding.UTF8, "text/plain")
};

这个方式返回的是纯文本格式的"100",接收端的reader.ReadToEnd()会拿到完整的字符串,Int32.TryParse就能成功解析出整数100。

关于接收端的说明

你的接收端代码逻辑是没问题的,只要发送端返回的是纯文本形式的"100",reader.ReadToEnd()就能拿到正确的内容,Int32.TryParse自然会成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:01:15