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

如何读取DefaultHttpContext的响应Body并完成对应单元测试?

问题核心原因

  • DefaultHttpContext默认的Response.Body是NullStream,所有写入操作都会被静默丢弃,必须替换为可读写的内存流
  • 调用WriteAsync写入内容后,流的指针会停留在写入内容的末尾,直接读取会从末尾开始读,拿到空结果,需要手动将指针重置到起始位置

修正后的测试代码

[Fact]
public async void HandleCabinet_ShouldReturnValidCabinetSettings()
{
    var startup = new Startup();
    var context = new DefaultHttpContext(); // 修正原代码拼写错误:DefaultHttpConext -> DefaultHttpContext

    // 替换响应流为可读写的MemoryStream
    context.Response.Body = new MemoryStream();

    await startup.HandleCabinet(context);

    // 重置流指针到起始位置,才能正常读取写入的内容
    context.Response.Body.Position = 0;

    string body;
    using (var reader = new StreamReader(context.Response.Body, Encoding.UTF8))
    {
        body = reader.ReadToEnd();
    }

    Assert.Equal("some expectation", body);
}

补充说明

如果需要使用BufferedStream也可以正常生效,只需要保证读取前重置流位置即可,和直接使用MemoryStream没有本质区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:45:03