.net核心中的异步流下载

时间:2018-01-05 05:26:52

标签: asynchronous asp.net-core

我在这里遇到了一个问题,需要你的帮助。

我有一个使用PushStream进行异步下载的.net web api项目,比如

new PushStreamContent(async (outputStream, httpContent, transportContext))=>{}

通过这种方式,我可以在动作中下载多个部分。

但是,现在我想将项目移动到.net核心,我无法在.net核心中找到pushstream的替代品。

请您告诉我有关于.net核心中的pushstream或实现它的任何方法吗?

非常感谢。

1 个答案:

答案 0 :(得分:4)

PushStreamContent基本上设置在处理输出流时调用的回调。这在ASP.NET Web Api中是必需的,因为无法直接访问OutputStream

但是,在ASP.NET Core中,您可以通过HttpContext.Response.Body直接访问输出流。因此,您可以直接写入该流而无需PushStreamContent

FWIW,虽然这可以节省一些服务器资源,但实际上非常糟糕,尤其是像API这样的东西。由于您直接写入输出流,因此已发送标头,包括响应状态代码。这意味着如果在您写作时出现任何异常,则没有机会适当地处理它。响应被简单地中止,并且客户端被称为“成功”响应,只有部分正文。就个人而言,我会说完全避免这种做法,并采取资源打击。除非您正在流式传输数据,否则任何良好的服务器设置都将拥有大量的RAM来处理您正在执行的操作。即便如此,可能还有更好的方法来处理这些数据。