您可以使用 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录