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

MAUI Hybrid(.NET9)中OnAppLinkRequestReceived内导航:Shell.Current为空

因为MAUI Hybrid应用基于BlazorWebView而非传统Shell导航体系,所以Shell.Current为空是正常现象。你可以通过以下方式实现AppLink对应的页面导航:

步骤1:给BlazorWebView命名

在你的MainPage.xaml中,给BlazorWebView控件添加x:Name属性,方便后续获取实例:

<BlazorWebView x:Name="MainBlazorWebView" HostPage="wwwroot/index.html">
    <!-- 你的BlazorWebView其他配置 -->
</BlazorWebView>

步骤2:在OnAppLinkRequestReceived中实现导航逻辑

修改App.xaml.cs中的重写方法,通过MainPage获取BlazorWebView实例,解析AppLink的URI后调用Blazor导航:

protected override async void OnAppLinkRequestReceived(Uri uri)
{
    base.OnAppLinkRequestReceived(uri);

    await Dispatcher.DispatchAsync(() =>
    {
        // 获取BlazorWebView实例
        if (MainPage is ContentPage mainPage && 
            mainPage.FindByName<BlazorWebView>("MainBlazorWebView") is BlazorWebView blazorWebView)
        {
            // 解析AppLink URI,提取Blazor路由部分
            // 示例:若AppLink为 myapp://details/123,提取出 /details/123
            string blazorRoute = uri.AbsolutePath;
            
            // 若URI带查询参数,可直接拼接,比如:
            // blazorRoute += uri.Query;

            // 执行Blazor页面导航
            blazorWebView.NavigateTo(blazorRoute);
        }
    });
}

关键说明

  • 确保MainPage是包含BlazorWebView的ContentPage,如果你的页面结构不同,需调整获取BlazorWebView的逻辑。
  • URI解析规则需匹配你的AppLink定义,比如需要过滤scheme、host等前缀时,要额外处理(比如从myapp://apphost/products/456中提取/products/456)。
  • 导航操作必须在UI线程执行,因此用Dispatcher.DispatchAsync包裹逻辑。

内容的提问来源于stack exchange,提问作者Gilles V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:38:24