perutean dan navigasi inti Blazor Hybrid ASP.NET
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Artikel ini menjelaskan cara mengelola perutean dan navigasi permintaan di Blazor Hybrid aplikasi.
Perilaku perutean permintaan URI
Perilaku perutean permintaan URI default:
- Tautan bersifat internal jika nama host dan skema cocok antara URI asal aplikasi dan URI permintaan. Ketika nama host dan skema tidak cocok atau jika tautan diatur
target="_blank"
, tautan dianggap eksternal. - Jika tautan bersifat internal, tautan akan dibuka di
BlazorWebView
oleh aplikasi. - Jika tautan eksternal, tautan dibuka oleh aplikasi yang ditentukan oleh perangkat berdasarkan handler terdaftar perangkat untuk skema tautan.
- Untuk tautan internal yang tampaknya meminta file karena segmen terakhir URI menggunakan notasi titik (misalnya, ,
/file.x
,/Maryia.Melnyk
/image.gif
) tetapi jangan arahkan ke konten statis apa pun:- WPF dan Formulir Windows: Konten halaman host dikembalikan.
- .NET MAUI: Respons 404 dikembalikan.
Untuk mengubah perilaku penanganan tautan untuk tautan yang tidak diatur target="_blank"
, daftarkan UrlLoading
peristiwa dan atur UrlLoadingEventArgs.UrlLoadingStrategy properti . Enumerasi UrlLoadingStrategy memungkinkan pengaturan perilaku penanganan tautan ke salah satu nilai berikut:
- OpenExternally: Muat URL menggunakan aplikasi yang ditentukan oleh perangkat. Ini adalah strategi default untuk URI dengan host eksternal.
- OpenInWebView: Muat URL dalam
BlazorWebView
. Ini adalah strategi default untuk URL dengan host yang cocok dengan asal aplikasi. Jangan gunakan strategi ini untuk tautan eksternal kecuali Anda dapat memastikan URI tujuan sepenuhnya tepercaya. - CancelLoad: Membatalkan upaya pemuatan URL saat ini.
Properti UrlLoadingEventArgs.Url digunakan untuk mendapatkan atau mengatur URL secara dinamis.
Peringatan
Tautan eksternal dibuka dalam aplikasi yang ditentukan oleh perangkat. Membuka tautan eksternal dalam BlazorWebView
dapat memperkenalkan kerentanan keamanan dan tidak boleh diaktifkan kecuali Anda dapat memastikan bahwa tautan eksternal sepenuhnya tepercaya.
Dokumentasi API:
- .NET MAUI: BlazorWebView.UrlLoading
- WPF: BlazorWebView.UrlLoading
- Formulir Windows:BlazorWebView.UrlLoading
Namespace Microsoft.AspNetCore.Components.WebView diperlukan untuk contoh berikut:
using Microsoft.AspNetCore.Components.WebView;
Tambahkan penanganan aktivitas berikut ke konstruktor Page
tempat BlazorWebView
dibuat, yang ada MainPage.xaml.cs
di aplikasi yang dibuat dari .NET MAUI templat proyek.
blazorWebView.UrlLoading +=
(sender, urlLoadingEventArgs) =>
{
if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
{
urlLoadingEventArgs.UrlLoadingStrategy =
UrlLoadingStrategy.OpenInWebView;
}
};
UrlLoading="Handle_UrlLoading"
Tambahkan atribut ke BlazorWebView
kontrol dalam .xaml
file:
<blazor:BlazorWebView HostPage="wwwroot\index.html"
Services="{StaticResource services}"
x:Name="blazorWebView"
UrlLoading="Handle_UrlLoading">
Tambahkan penanganan aktivitas dalam .xaml.cs
file:
private void Handle_UrlLoading(object sender,
UrlLoadingEventArgs urlLoadingEventArgs)
{
if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
{
urlLoadingEventArgs.UrlLoadingStrategy =
UrlLoadingStrategy.OpenInWebView;
}
}
Dalam konstruktor formulir yang berisi BlazorWebView
kontrol, tambahkan pendaftaran peristiwa berikut:
blazorWebView.UrlLoading +=
(sender, urlLoadingEventArgs) =>
{
if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
{
urlLoadingEventArgs.UrlLoadingStrategy =
UrlLoadingStrategy.OpenInWebView;
}
};
Mendapatkan atau mengatur jalur untuk navigasi awal
BlazorWebView.StartPath
Gunakan properti untuk mendapatkan atau mengatur jalur untuk navigasi awal dalam Blazor konteks navigasi saat Razor komponen selesai dimuat. Jalur mulai default adalah jalur URL akar relatif (/
).
MainPage
Di markup XAML (MainPage.xaml
), tentukan jalur mulai. Contoh berikut mengatur jalur ke halaman selamat datang di /welcome
:
<BlazorWebView ... StartPath="/welcome" ...>
...
<BlazorWebView>
Atau, jalur mulai dapat diatur dalam MainPage
konstruktor (MainPage.xaml.cs
):
blazorWebView.StartPath = "/welcome";
Di perancang MainWindow
(MainWindow.xaml
), tentukan jalur mulai. Contoh berikut mengatur jalur ke halaman selamat datang di /welcome
:
<blazor:BlazorWebView ... StartPath="/welcome" ...>
...
</blazor:BlazorWebView>
Form1
Di dalam konstruktor Form1.cs
file, tentukan jalur mulai. Contoh berikut mengatur jalur ke halaman selamat datang di /welcome
:
blazorWebView1.StartPath = "/welcome";
Navigasi di antara halaman dan Razor komponen
Bagian ini menjelaskan cara menavigasi di antara .NET MAUI halaman konten dan Razor komponen.
.NET MAUIBlazor Templat proyek hibrid bukan aplikasi berbasis Shell, sehingga navigasi berbasis URI untuk aplikasi berbasis Shell tidak cocok untuk proyek berdasarkan templat proyek. Contoh di bagian ini menggunakan NavigationPage untuk melakukan navigasi modeless atau modal.
Dalam contoh berikut:
- Namespace aplikasi adalah
MauiBlazor
, yang cocok dengan nama proyek yang disarankan dari tutorial Membangun .NET MAUIBlazor Hybrid aplikasi . - ContentPage ditempatkan di folder baru yang ditambahkan ke aplikasi bernama
Views
.
Di App.xaml.cs
, buat MainPage
sebagai dengan NavigationPage membuat perubahan berikut:
- MainPage = new MainPage();
+ MainPage = new NavigationPage(new MainPage());
Views/NavigationExample.xaml
:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiBlazor"
x:Class="MauiBlazor.Views.NavigationExample"
Title="Navigation Example"
BackgroundColor="{DynamicResource PageBackgroundColor}">
<StackLayout>
<Label Text="Navigation Example"
VerticalOptions="Center"
HorizontalOptions="Center"
FontSize="24" />
<Button x:Name="CloseButton"
Clicked="CloseButton_Clicked"
Text="Close" />
</StackLayout>
</ContentPage>
Dalam file kode berikut NavigationExample
, CloseButton_Clicked
penanganan aktivitas untuk panggilan PopAsync tombol tutup untuk memunculkan ContentPage tumpukan navigasi.
Views/NavigationExample.xaml.cs
:
namespace MauiBlazor.Views;
public partial class NavigationExample : ContentPage
{
public NavigationExample()
{
InitializeComponent();
}
private async void CloseButton_Clicked(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
}
Razor Dalam komponen:
- Tambahkan namespace layanan untuk halaman konten aplikasi. Dalam contoh berikut, namespace adalah
MauiBlazor.Views
. - Tambahkan elemen HTML
button
dengan@onclick
penanganan aktivitas untuk membuka halaman konten. Metode penanganan aktivitas diberi namaOpenPage
. - Di penanganan aktivitas, panggil PushAsync untuk mendorong ContentPage,
NavigationExample
, ke tumpukan navigasi.
Contoh berikut didasarkan pada Index
komponen dalam .NET MAUIBlazor templat proyek.
Pages/Index.razor
:
@page "/"
@using MauiBlazor.Views
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
<button class="btn btn-primary" @onclick="OpenPage">Open</button>
@code {
private async void OpenPage()
{
await App.Current.MainPage.Navigation.PushAsync(new NavigationExample());
}
}
Untuk mengubah contoh sebelumnya ke navigasi modal:
CloseButton_Clicked
Dalam metode (Views/NavigationExample.xaml.cs
), ubah PopAsync menjadi PopModalAsync:- await Navigation.PopAsync(); + await Navigation.PopModalAsync();
OpenPage
Dalam metode (Pages/Index.razor
), ubah PushAsync menjadi PushModalAsync:- await App.Current.MainPage.Navigation.PushAsync(new NavigationExample()); + await App.Current.MainPage.Navigation.PushModalAsync(new NavigationExample());
Untuk informasi selengkapnya, lihat sumber daya berikut:
Penautan aplikasi (penautan mendalam)
Sering kali diinginkan untuk menghubungkan situs web dan aplikasi seluler sehingga tautan di situs web meluncurkan aplikasi seluler dan menampilkan konten di aplikasi seluler. Penautan aplikasi, juga dikenal sebagai penautan mendalam, adalah teknik yang memungkinkan perangkat seluler merespons URI dan meluncurkan konten di aplikasi seluler yang diwakili oleh URI.
Untuk informasi selengkapnya, lihat artikel berikut ini dalam .NET MAUI dokumentasi:
ASP.NET Core