ASP.NETCore中的IAsyncEnumerable<T>在部署于IIS上时不支持流式处理行为?
创始人
2024-09-18 13:30:54
0

可以尝试在部署时使用 Microsoft.AspNetCore.Server.Kestrel NuGet 包,并在 Startup.cs 中配置应用程序并设置支持流式处理的响应头。以下是示例代码:

在 ConfigureServices 中添加以下代码:

services.AddControllers().AddNewtonsoftJson();
services.AddHttpContextAccessor();
services.AddResponseCompression();

// 添加 Kestrel 选项并设置最大响应缓存(单位:字节)
services.Configure(options =>
{
    options.Limits.MaxResponseBufferSize = 10 * 1024 * 1024; // 10MB
});

// 添加 MVC 中间件以支持控制器
services.AddMvc(options =>
{
    // 设置流式处理响应头
    options.OutputFormatters.Add(new StreamOutputFormatter());
    options.FormatterMappings.SetMediaTypeMappingForFormat("stream", "application/octet-stream");
});

在 Configure 方法中添加以下代码:

// 启用响应压缩中间件
app.UseResponseCompression();

// 添加控制器路由
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

添加一个自定义的流式输出格式化器 StreamOutputFormatter.cs,用于将 IAsyncEnumerable 内容流式输出:

public class StreamOutputFormatter : IOutputFormatter
{
    public string ContentType { get; } = "application/octet-stream";

    public bool CanWriteResult(OutputFormatterCanWriteContext context)
    {
        return context.Object is IAsyncEnumerable asyncEnumerable;
    }

    public async Task WriteAsync(OutputFormatterWriteContext context)
    {
        var asyncEnumerable = (IAsyncEnumerable)context.Object;

        using (var responseStream = context.HttpContext.Response.Body)
        {
            await foreach (var item in asyncEnumerable)
            {
                var itemBytes = Encoding.UTF8.GetBytes(item.ToString());
                await responseStream.WriteAsync(itemBytes, 0, itemBytes.Length);
                await responseStream.FlushAsync();
            }
        }
    }
}

最后在控制器中使用 IAsyncEnumerable 订阅器发出

相关内容

热门资讯

透视脚本(wpk俱乐部)德州辅... 透视脚本(wpk俱乐部)德州辅助软件(详细辅助黑科技教程)往昔真的有挂(1)透视脚本(wpk俱乐部)...
透视攻略(wepoke)透明挂... 透视攻略(wepoke)透明挂辅助器(wepoke智能ai)确实有挂(详细透视新2025版);人气非...
透视了解(aapoker有挂)... 透视了解(aapoker有挂)微扑克大厅都是机器人(详细辅助解密教程)总是真的是有挂1)aapoke...
透视软件(wePoKe)外挂透... 1、透视软件(wePoKe)外挂透明挂辅助软件(wepoke有没有挂)都是存在有挂(详细透视可靠教程...
透视神器(wpk有透视辅助)w... 透视神器(wpk有透视辅助)wpk德州辅助器(详细辅助2025新版技巧)本来是有挂1、很好的工具软件...
透视透视(wePOKE)外挂透... 1、透视透视(wePOKE)外挂透明挂辅助技巧(wepoke的确有挂)好像存在有挂(详细透视透明挂教...
透视挂透视(wepokeai代... 透视挂透视(wepokeai代打)德州ai人工智能软件下载(详细辅助力荐教程)起初是有挂;人气非常高...
透视真的(WepokE)透明挂... 透视真的(WepokE)透明挂辅助安装(wepoke辅助挂)起初有挂(详细透视高科技教程)1、很好的...
透视好友房(德州之星辅助)we... 透视好友房(德州之星辅助)wepoke有软件吗(详细辅助切实教程)原来真的有挂是一款可以让一直输的玩...
透视辅助(德州ai机器人)gg... 透视辅助(德州ai机器人)gg扑克发牌系统(详细辅助微扑克教程)原来是有挂1、许多玩家不知道德州ai...