您可以使用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}\n\n");

    await Response.Body.WriteAsync(bytes, 0, bytes.Length);

    await Response.Body.FlushAsync();

    return new EmptyResult();
}

在此示例中,我们首先向响应头添加了“Content-Type”标头,以指示响应类型为文本/事件流。接下来,我们将数据编码为字节数组,并使用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端点。每次收到新的数据时,我们会将其打印到浏览器的控制台中。

c# webapi eventstream流逐字返回

原文地址: https://www.cveoy.top/t/topic/3RH 著作权归作者所有。请勿转载和采集!

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