如何将Blazor 6/7 Server应用迁移至Blazor 8 InteractiveServer?
将Blazor 6/7 Server应用迁移到Blazor 8 Interactive Server的核心变更
1. 升级项目基础环境
- 安装.NET 8 SDK,修改项目文件(.csproj)的
TargetFramework为net8.0 - 更新所有NuGet依赖包至.NET 8兼容版本,重点更新
Microsoft.AspNetCore.Components.Server等核心组件包
2. 重构Program.cs配置
- 移除原
builder.Services.AddServerSideBlazor(),替换为交互式服务注册:builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); - 替换原路由配置代码,启用交互式Server渲染模式:
app.MapRazorComponents<App>() .AddInteractiveServerRenderMode(); - 若需全局默认启用Interactive Server模式,可扩展配置:
.AddInteractiveServerRenderMode(options => { options.DefaultRenderMode = RenderMode.InteractiveServer; })
3. 配置组件渲染模式
- 在根组件
App.razor顶部添加属性,全局应用Interactive Server渲染:@attribute [RenderModeInteractiveServer] - 针对单个组件/页面设置渲染模式,直接在对应组件顶部添加上述属性即可
- 移除
_Host.cshtml中手动指定的render-mode="Server"参数
4. 防伪造逻辑适配修改
4.1 全局防伪造配置
- 保留或调整Program.cs中的防伪造服务配置,按需自定义规则:
builder.Services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN"; // 自定义请求头名称 });
4.2 API请求的令牌传递
- 在需要调用API的组件中注入服务:
@inject IAntiforgery Antiforgery @inject HttpClient Http - 获取令牌并添加到请求头,替代原Blazor Server的自动附带头逻辑:
var tokens = await Antiforgery.GetTokensAsync(); Http.DefaultRequestHeaders.Add(tokens.HeaderName, tokens.RequestToken);
4.3 表单提交的令牌处理
- 移除原Razor页面中
@Html.AntiForgeryToken()写法,Interactive Server组件中Blazor会自动为表单生成防伪造令牌;若需手动控制,可通过以下方式添加隐藏字段:var tokens = await Antiforgery.GetTokensAsync(); <input type="hidden" name="@tokens.FormFieldName" value="@tokens.RequestToken" />
5. 其他细节调整
- 更新
_Imports.razor,添加必要的命名空间:@using Microsoft.AspNetCore.Components.Web.InteractiveServer - 移除原项目中Blazor Server特定配置(如
_Host.cshtml中的autostart="false"等参数) - 测试组件生命周期方法(如
OnInitializedAsync)、状态保持逻辑,确保交互式渲染下正常工作
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

