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

如何在单个ASP.NET Core Blazor项目中托管多个WASM客户端应用

问题解决方案

核心错误原因

你的MapWhen匹配规则设置错误:当前仅当请求路径**完全等于/client**时才会进入Blazor应用托管分支,后续加载_framework/blazor.webassembly.js等资源时,请求路径为/client/_framework/blazor.webassembly.js,不满足完全匹配条件,不会进入分支处理,直接返回404。
同时分支内的路径重写逻辑存在错误,会重复拼接/client前缀,进一步导致资源路径异常。

修正步骤

  1. 将MapWhen的匹配条件改为匹配所有以/client开头的请求
  2. 移除错误的路径重写中间件
  3. 修正回退路由的配置参数

修改后的完整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:39:04