我在这里遇到一个问题,需要你的帮助。
我有一个 .net web api 项目,使用 PushStream 进行异步下载,类似于
new PushStreamContent(async (outputStream, httpContent, transportContext))=>{}
这样,我就可以在action中进行多个部分的下载。
但是,现在我想将项目移至 .net core,但在 .net core 中找不到 Pushstream 的替代品。
请问.net core中有没有类似pushstream的东西或者有什么方法可以实现它?
非常感谢。
最佳答案
PushStreamContent
的工作原理本质上是设置一个在处理输出流时调用的回调。这在 ASP.NET Web Api 中是必要的,因为无法直接访问 OutputStream
。
但是,在 ASP.NET Core 中,您可以通过 HttpContext.Response.Body
直接访问输出流。因此,您可以直接写入该流,而不需要像 PushStreamContent
这样的东西。
FWIW,虽然这可以节省一些服务器资源,但实际上非常糟糕,尤其是对于 API 之类的东西。由于您直接写入输出流,因此 header 已发送,包括响应状态代码。这意味着如果在您编写时出现任何异常,则没有机会进行适当的处理。响应被简单地中止,并且客户端被悬而未决,并留下了所谓的“成功”响应,并且只有部分主体。就我个人而言,我会说完全避免这种做法并承受资源损失。除非您要传输大量数据,否则任何良好的服务器设置都将拥有充足的 RAM 来处理您正在做的事情。即便如此,可能还有更好的方法来处理数据的交付。
关于asynchronous - .net core 中的异步流下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107679/