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

如何在ASP.NET MVC应用中托管Razor类库并启用WebAssembly渲染?

解决ASP.NET MVC项目中Razor组件Server/WebAssembly渲染模式空白及404问题

一、缺失的核心配置项

1. 补充Server渲染模式必需的SignalR中间件

Server渲染依赖Blazor Hub的SignalR连接,需在Program.cs的中间件管道中添加:

// 置于app.MapRazorComponents配置之前
app.UseAntiforgery();
app.MapBlazorHub();

缺少此配置时,Server/ServerPrerendered模式无法建立实时连接,组件会显示空白。

2. 完善WebAssembly渲染的托管配置

WebAssembly模式需要宿主项目提供Wasm运行时资源(如_framework/dotnet.js),需完成以下操作:

  • 安装NuGet包:在MvcWebApp项目中安装Microsoft.AspNetCore.Components.WebAssembly.Server
  • 添加WebAssembly调试支持:在Program.cs中UseStaticFiles之后添加:
app.UseWebAssemblyDebugging();
  • 指定Razor类库组件程序集:修改MapRazorComponents配置,确保框架能识别类库中的组件:
app.MapRazorComponents<Counter>()
    .AddInteractiveServerRenderMode()
    .AddInteractiveWebAssemblyRenderMode()
    .AddAdditionalAssemblies(typeof(RazorComponentLib.Counter).Assembly);

3. 在布局页添加Blazor WebAssembly启动脚本

在MvcWebApp的布局文件(如Views/Shared/_Layout.cshtml)的</body>标签前添加:

<script src="_framework/blazor.webassembly.js"></script>

这是WebAssembly组件初始化的必需脚本,缺失会导致Wasm组件无法激活。

二、完整Program.cs示例

var builder = WebApplication.CreateBuilder(args);

// 添加Mvc服务
builder.Services.AddControllersWithViews();

// 配置Razor组件及交互模式
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents()
    .AddInteractiveWebAssemblyComponents();

var app = builder.Build();

// 异常处理配置
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
// WebAssembly调试支持需在静态文件之后
app.UseWebAssemblyDebugging();

app.UseRouting();
app.UseAuthorization();

// Mvc默认路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

// Server渲染必需的Antiforgery与Blazor Hub
app.UseAntiforgery();
app.MapBlazorHub();

// 映射Razor组件并关联类库程序集
app.MapRazorComponents<Counter>()
    .AddInteractiveServerRenderMode()
    .AddInteractiveWebAssemblyRenderMode()
    .AddAdditionalAssemblies(typeof(RazorComponentLib.Counter).Assembly);

app.Run();

三、额外注意事项

  • 确保MvcWebApp已添加对RazorComponentLib项目的引用
  • WebAssembly模式首次启动时会下载运行时资源,需等待片刻才能激活组件
  • 若仍出现404问题,检查MvcWebApp运行后wwwroot目录是否自动生成了_framework文件夹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:17:25