在Web API中转发和存储请求流

时间:2016-02-04 18:58:11

标签: c# asp.net http asp.net-web-api stream

我有一个使用ASP.NET Web API 2编写的服务。其中一部分涉及接收图像并将它们转发到不同的Web服务(在不同的机器上)。所以,流程是:

  • 客户端对我的服务执行HTTP POST,并将二进制图像作为正文。
  • 在我的控制器中,我调用Request.Content.ReadAsStreamAsync()。
  • 该流最终被异步发送为HTTP请求的主体。

通过这种设计,我相信字节会在收到时转发到其他服务,因此我们无需等待整个图像在发送之前被读取。

没关系,但现在我想存储一份图像,供以后分析。

  • 我不能只是Stream.Seek(0,SeekOrigin.Begin),因为第一次读取后流已关闭。
  • 我可以使用ReadAsByteArrayAsync(),将其包装在MemoryStream中,然后轻松将其发送到远程服务和Azure blob存储。但这会降低服务速度,因为在发送之前需要读取整个图像。

我有没有考虑过替代方法?关于将请求流传递给另一个请求的基本假设是否有效?

1 个答案:

答案 0 :(得分:-1)

感谢来自同事的指针,我最终找到了这个示例,该示例展示了如何将HttpContent包装为同时写入原始流和文件的内容:http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ResponseEntityProcessorSample/Handlers/HttpContentProcessor.cs

此示例显示如何异步中继请求:http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/RelaySample/Controllers/RelayController.cs