ASP.NET核心和102状态码实现

ASP.NET Core and 102 status code implementation

我有长时间的操作,通过网络调用API。状态码 102 告诉我们:

An interim response used to inform the client that the server has accepted the complete request, but has not yet completed it.

This status code SHOULD only be sent when the server has a reasonable expectation that the request will take significant time to complete. As guidance, if a method is taking longer than 20 seconds (a reasonable, but arbitrary value) to process the server SHOULD return a 102 (Processing) response. The server MUST send a final response after the request has been completed.

所以,我想return 102状态码给客户端,然后客户端等待操作结果的响应。如何在 .NET 上实现?

我读了这个帖子:

这个帖子很好的解释了什么是必要的,但是没有回应。我不明白它是如何在 .NET 上实现的,而不是理论...

使用 HTTP 102 要求服务器为一个请求发送两个响应。 ASP.NET (Core or not) 不支持在没有完全结束请求的情况下向客户端发送响应。任何发送两个响应的尝试都将以抛出异常而告终,并且无法正常工作。 (我尝试了几种不同的方式)

有一个很好的讨论 here 关于它实际上不在 HTTP 规范中的原因,因此实际上并不需要实现它。

我可以想到几个替代方案:

  1. 使用网络套接字(一种允许来回发送数据的持久连接),例如 SignalR。
  2. 如果您的请求因为要从其他地方获取数据而花费很长时间,您可以尝试通过流提取该数据并通过流将其发送到客户端。这将在数​​据传入时发送数据,而不是在发送之前先将其全部加载到内存中。下面是一个将数据从数据库流式传输到响应的示例: