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

如何从组件Type或相对URL构建Blazor RouteData对象供RouteView使用

生成RouteData的实现方式

你需要先对指定路径做路由匹配,再从匹配结果中获取RouteData对象,以下是可直接复用的实现:

前置依赖

在_Imports.razor中引入必要命名空间、注入服务:

@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Http
@inject ILoggerFactory LoggerFactory

方式1:手动为指定路径生成RouteData

适合你需要自定义传入/counter这类固定路径的场景:

@code {
    private RouteData? routeData;

    protected override void OnInitialized()
    {
        // 替换为你需要的目标路由
        const string targetRoute = "/counter";
        var routeContext = new RouteContext(PathString.FromUriComponent(targetRoute));

        // 初始化路由组件加载应用全量路由表
        var router = new Router
        {
            AppAssembly = typeof(Program).Assembly,
            LoggerFactory = LoggerFactory
        };

        // 执行路由匹配
        router.RouteAsync(routeContext).Wait();
        
        // 路由匹配成功则拿到可用的RouteData
        if (routeContext.RouteData is not null)
        {
            routeData = routeContext.RouteData;
            // 可按需自定义追加路由参数
            // routeData.Values["customParam"] = "testValue";
        }
    }
}

方式2:从路由导航事件直接获取

如果你是在App.razor的路由拦截逻辑中使用,可以直接从导航上下文拿到当前路径对应的RouteData,无需手动构造:

<Router AppAssembly="@typeof(Program).Assembly" OnNavigateAsync="HandleNavigate">
    <Found Context="foundRouteData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <p>404 页面不存在</p>
    </NotFound>
</Router>

@code {
    private RouteData? routeData;

    private Task HandleNavigate(NavigationContext context)
    {
        // 直接获取当前路径匹配的RouteData
        routeData = context.RouteData;
        return Task.CompletedTask;
    }
}

注意事项

  • 如果目标路径未匹配到任何注册路由,RouteData会为null,你可以按需补充404逻辑
  • RouteData.Values为字典类型,可直接读写自定义路由参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:06:05