You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Blazor流式渲染在Azure App Service中失效求助

.NET 8 Blazor SSR应用流式渲染部署到Azure App Service后失效问题

开发了一个未启用交互性的.NET 8 Blazor SSR应用,本地运行时流式渲染功能正常——提交表单时变量变化会局部更新UI。但通过GitHub Actions部署到Azure App Service后,流式渲染失效,页面会卡住直到表单提交完成才更新UI。

页面特性代码

@page "/contact"

@attribute [StreamRendering]

可变状态按钮组件代码

<button type="@Type" disabled="@IsLoading"
        class="border-0 ring-1 ring-inset ring-gray-300 bg-black px-3.5 py-2.5 text-sm font-semibold text-white shadow hover:bg-gray-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600 disabled:bg-gray-800 disabled:cursor-progress">
    @if (IsLoading)
    {
        <LoadingSpinner Size="LoadingSpinnerSize.Small"/>
    }
    else
    {
        @ChildContent
    }
</button>

@code {

    [Parameter]
    public RenderFragment? ChildContent { get; set; }

    [Parameter]
    public string Type { get; set; } = "button";

    [Parameter]
    public bool IsLoading { get; set; }

}

Program.cs代码

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorComponents();

builder.Services.AddMemoryCache();

builder.Services.AddHttpContextAccessor();

builder.Services.AddApplicationServices(builder.Configuration);

builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseStaticFiles();
app.UseAntiforgery();

app.MapRazorComponents<App>();

app.Run();

App.razor代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <base href="/"/>
    <link rel="stylesheet" href="css/app.min.css"/>
    <link rel="stylesheet"
          href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
          integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
          crossorigin="anonymous"
          referrerpolicy="no-referrer"/>
    <HeadOutlet/>
</head>

<body class="bg-black font-mono text-slate-50 min-h-screen antialiased">
<Routes/>
<script src="_framework/blazor.web.js"></script>
</body>

</html>

POST请求提交后的浏览器开发者工具截图

浏览器开发者工具截图


解决思路与方案

1. 验证Azure App Service运行时配置

确保Azure App Service使用**.NET 8运行时**,部署模式设置正确:

  • 登录Azure门户,进入目标App Service
  • 导航至「配置」→「常规设置」
  • 确认「.NET版本」选择为.NET 8,「部署模式」匹配你的发布方式(框架依赖/独立部署)

2. 禁用响应缓存

Azure App Service默认缓存策略会阻断流式渲染的分块输出,添加中间件禁用缓存:
在Program.cs中,UseStaticFiles之后、MapRazorComponents之前插入:

app.Use(async (context, next) =>
{
    context.Response.Headers.CacheControl = "no-cache, no-store, must-revalidate";
    context.Response.Headers.Pragma = "no-cache";
    context.Response.Headers.Expires = "0";
    await next();
});

3. 强制启用分块传输编码

显式设置响应头开启分块传输,确保流式输出正常:

app.Use(async (context, next) =>
{
    context.Response.Headers.TransferEncodingChunked = "true";
    await next();
});

4. 检查GitHub Actions部署脚本

确保发布命令正确生成.NET 8应用包:

dotnet publish -c Release -o publish

避免脚本中存在修改运行时配置的额外步骤,确保部署包完整包含流式渲染相关依赖。

5. 排查Application Insights干扰

临时禁用Application Insights测试是否恢复正常:

// 注释以下行进行测试
// builder.Services.AddApplicationInsightsTelemetry();

若恢复,可调整Application Insights配置,避免拦截流式响应。


内容的提问来源于stack exchange,提问作者Beau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:50:05