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

如何让含Blazor组件的ASP.NET Core Razor Pages按需建立WebSocket连接?

解决方案

要实现仅在需要Blazor Server功能的页面建立WebSocket连接,其余页面保持纯Razor Pages状态,你需要调整三个核心配置:

1. 移除全局默认的交互式Server渲染模式

在Program.cs中,保留Blazor服务注册,但不要全局设置默认的交互式Server渲染模式:

// 保留Blazor服务注册
builder.Services.AddRazorComponents().AddInteractiveServerComponents();

// 移除AddInteractiveServerRenderMode(),仅基础映射Razor组件
app.MapRazorComponents<App>();

全局添加AddInteractiveServerRenderMode()会让所有页面默认启用Blazor Server的连接机制,这是导致首页也建立WebSocket的核心原因。

2. 仅在需要的页面引入Blazor脚本

从共享的_Layout.cshtml中移除<script src="_framework/blazor.web.js"></script>,改为只在需要Blazor组件的页面单独引入:

比如,在需要Blazor的Razor Page(如Pages/BlazorEnabledPage.cshtml)中添加:

@section Scripts {
    <script src="_framework/blazor.web.js"></script>
}

如果是多个Blazor页面共享布局,可以创建一个专用的_BlazorLayout.cshtml,在其中引入该脚本,然后让Blazor页面使用这个布局。

3. 为Blazor组件指定交互式Server渲染模式

在需要嵌入Blazor组件的页面中,通过render-mode="InteractiveServer"明确指定渲染模式:

<component type="typeof(YourBlazorComponentFromLibrary)" render-mode="InteractiveServer" />

如果是全页Blazor应用(而非嵌入组件),可以创建一个Razor Page作为入口,在页面中渲染根组件并指定渲染模式:

@page "/full-blazor-page"
@using YourBlazorLibrary

<component type="typeof(FullPageBlazorComponent)" render-mode="InteractiveServer" />

验证效果

完成上述配置后:

  • 纯Razor Pages页面不会加载blazor.web.js,也不会建立WebSocket连接
  • 仅包含Blazor组件且正确配置的页面,会在加载时初始化Blazor Server连接,建立WebSocket

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:52:09