MAUI Hybrid(.NET9)中OnAppLinkRequestReceived内导航:Shell.Current为空
.NET 9 MAUI Hybrid AppLink 导航实现方案
因为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.
相关产品推荐
相关产品推荐

