C# Web API 事件流:逐字返回数据
您可以使用 ASP.NET Core Web API 中的 Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultExecutor
[HttpGet]
[Route('stream')]
public async Task<IActionResult> Stream()
{
Response.Headers.Add('Content-Type', 'text/event-stream');
var data = 'Hello, world!';
var bytes = Encoding.UTF8.GetBytes($'data: {data}
');
await Response.Body.WriteAsync(bytes, 0, bytes.Length);
await Response.Body.FlushAsync();
return new EmptyResult();
}
在此示例中,我们首先向响应头添加了 'Content-Type' 标头,以指示响应类型为 text/event-stream。接下来,我们将数据编码为字节数组,并使用 Response.Body.WriteAsync 方法将其写入响应流中。请注意,在写入数据之后,我们还必须调用 Response.Body.FlushAsync 方法来确保数据被发送到客户端。
最后,我们返回一个 EmptyResult,因为我们已经直接向响应流写入数据,而不需要使用视图或其他结果类型。
在客户端,您可以使用 JavaScript 中的 EventSource 对象来接收事件流数据。以下是一个使用 jQuery 的示例代码:
$(function() {
var source = new EventSource('/api/mycontroller/stream');
source.onmessage = function(event) {
console.log(event.data);
};
});
在此示例中,我们创建了一个新的 EventSource 对象,并将其连接到我们的 Web API 端点。每次收到新的数据时,我们会将其打印到浏览器的控制台中。
原文地址: https://www.cveoy.top/t/topic/mqe7 著作权归作者所有。请勿转载和采集!