如何在单个ASP.NET Core Blazor项目中托管多个WASM客户端应用
问题解决方案
核心错误原因
你的MapWhen匹配规则设置错误:当前仅当请求路径**完全等于/client**时才会进入Blazor应用托管分支,后续加载_framework/blazor.webassembly.js等资源时,请求路径为/client/_framework/blazor.webassembly.js,不满足完全匹配条件,不会进入分支处理,直接返回404。
同时分支内的路径重写逻辑存在错误,会重复拼接/client前缀,进一步导致资源路径异常。
修正步骤
- 将
MapWhen的匹配条件改为匹配所有以/client开头的请求 - 移除错误的路径重写中间件
- 修正回退路由的配置参数
修改后的完整Startup.cs代码
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Notes.Web.Server { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseWebAssemblyDebugging(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 匹配所有以/client开头的请求 app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/client"), client => { client.UseBlazorFrameworkFiles("/client"); client.UseStaticFiles(); client.UseRouting(); client.UseAuthorization(); client.UseEndpoints(endpoints => { endpoints.MapControllers(); // 回退到client目录下的index.html endpoints.MapFallbackToFile("client/index.html"); }); }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }
额外检查项
确认Blazor WebAssembly客户端项目的发布输出,已全部复制到服务器项目的wwwroot/client目录下,保证index.html路径为wwwroot/client/index.html,_framework文件夹也存在于wwwroot/client路径下。
内容的提问来源于stack exchange,提问作者alexsey bobrovitch
相关产品推荐
相关产品推荐

