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

为何Blazor无法路由到Razor类库中的组件?

解决Razor类库中带@page路由的组件无法访问的问题

这是个很常见的坑——Razor类库(RCL)中的路由组件不会被Blazor主项目自动发现,这就是为什么你直接引用无路由的AccountNavigation.razor没问题,但带@page的Login.razor路由不生效的原因。

Blazor的路由系统默认只会扫描主项目的程序集来寻找路由组件,引用的RCL除非明确告诉主项目要扫描它的程序集,否则路由组件不会被注册。下面是具体的解决步骤:

步骤1:在RCL中添加路由注册扩展(可选但更优雅)

在你的Razor类库中新建一个静态类,比如RclRouteRegistration.cs,用来封装路由注册逻辑:

using Microsoft.AspNetCore.Components;
using System.Reflection;

namespace YourRclProjectNamespace // 替换成你的RCL实际命名空间
{
    public static class RclRouteRegistration
    {
        /// <summary>
        /// 注册RCL中的路由组件
        /// </summary>
        public static IEndpointRouteBuilder MapRclRoutes(this IEndpointRouteBuilder endpoints)
        {
            // 告诉Blazor路由系统扫描当前RCL的程序集
            endpoints.MapRazorComponents<App>() // App是主项目的根组件类
                .AddAdditionalAssemblies(Assembly.GetExecutingAssembly());
            
            return endpoints;
        }
    }
}

步骤2:在主Blazor项目中注册RCL的路由

根据你的Blazor项目类型(Server/WebAssembly),在启动代码中添加路由扫描:

如果你用的是.NET 6+ Blazor Server/WebAssembly

在Program.cs中找到路由配置的部分,添加如下代码:

var app = builder.Build();

// ... 其他中间件配置(比如UseStaticFiles、UseRouting等)

// 方案1:直接指定扫描RCL程序集
app.MapRazorComponents<App>()
   .AddAdditionalAssemblies(typeof(YourRclProjectNamespace.Login).Assembly);

// 方案2:用我们刚才写的扩展方法更简洁
// app.MapRclRoutes();

app.Run();

如果你用的是.NET 5及以前的Blazor Server

在Startup.cs的Configure方法中,修改UseEndpoints部分:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");

    // 添加这行,扫描RCL程序集中的路由组件
    endpoints.MapRazorComponents<App>()
        .AddAdditionalAssemblies(typeof(YourRclProjectNamespace.Login).Assembly);
});

额外的配置优化建议

  • 把RCL的目标框架改成和主项目一致的版本(比如主项目用.NET 6,RCL就设为net6.0),netstandard2.1虽然兼容,但使用匹配的TFM能避免潜在的兼容问题。
  • 移除RCL中不必要的包引用:比如Microsoft.AspNetCore.Mvc.RazorPages对Blazor组件来说是多余的,你可以删掉这个引用,只保留Microsoft.AspNetCore.Components和Microsoft.AspNetCore.Components.Web即可。

这样修改后,主项目的路由系统就会扫描RCL的程序集,你的Login.razor的@page "/login"路由就能正常生效了,不管是通过链接访问还是手动输入地址都可以。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:45:41