Bagikan melalui


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:

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";

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:

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 nama OpenPage.
  • 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: