Artikel ini menjelaskan cara mengelola perutean dan navigasi permintaan di aplikasi Blazor Hybrid.

Perilaku perutean permintaan URI default:

  • Sebuah link adalah intern jika nama host dan skema cocok antara URI asal aplikasi dan URI permintaan. Ketika nama dan skema host tidak cocok atau jika tautannya disetel target="_blank"link dianggap luar.
  • Jika tautan internal, tautan dibuka di BlazorWebView oleh aplikasi.
  • Jika tautan bersifat eksternal, tautan dibuka oleh aplikasi yang ditentukan oleh perangkat berdasarkan penangan terdaftar perangkat untuk skema tautan.
  • Untuk tautan internal yang muncul untuk 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 Windows Forms: Konten halaman host dikembalikan.
    • .NET MAUI: Respons 404 dikembalikan.

Untuk mengubah perilaku penanganan tautan untuk tautan yang tidak disetel target="_blank"daftarkan UrlLoading acara dan atur UrlLoadingEventArgs.UrlLoadingStrategy Properti. Itu UrlLoadingStrategy enumeration 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 di 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.

Itu UrlLoadingEventArgs.Url properti digunakan untuk mendapatkan atau mengatur URL secara dinamis.

Peringatan

Secara default, tautan eksternal dibuka di aplikasi yang ditentukan oleh perangkat. Membuka tautan eksternal di dalam a BlazorWebView dapat memperkenalkan kerentanan keamanan dan harus bukan diaktifkan kecuali Anda dapat memastikan bahwa tautan eksternal sepenuhnya dipercaya.

ruang nama

Ruang nama Microsoft.AspNetCore.Components.WebView diperlukan untuk contoh dalam artikel ini:

using Microsoft.AspNetCore.Components.WebView;

Tambahkan event handler berikut ke konstruktor dari Page Dimana BlazorWebView dibuat, yaitu MainPage.xaml.cs dalam aplikasi yang dibuat dari template proyek .NET MAUI. Contoh berikut mengasumsikan x:Name="blazorWebView" (x:Name arahan) pada BlazorWebView dalam .xaml mengajukan.

blazorWebView.UrlLoading += 
    (sender, urlLoadingEventArgs) =>
    
        if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
        
            urlLoadingEventArgs.UrlLoadingStrategy = UrlLoadingStrategy.OpenInWebView;
        
    ;

Tambahkan UrlLoading="Handle_UrlLoading" atribut ke BlazorWebView kontrol di .xaml mengajukan:

<blazor:BlazorWebView HostPage="wwwroot\index.html" 
    Services="StaticResource services" 
    x:Name="blazorWebView" 
    UrlLoading="Handle_UrlLoading">

Tambahkan pengendali acara di .xaml.cs mengajukan:

private void Handle_UrlLoading(object sender, 
    UrlLoadingEventArgs urlLoadingEventArgs)

    if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
    
        urlLoadingEventArgs.UrlLoadingStrategy = UrlLoadingStrategy.OpenInWebView;
    

Dalam konstruktor formulir yang mengandung BlazorWebView kontrol, tambahkan pendaftaran acara berikut:

blazorWebView.UrlLoading += 
    (sender, urlLoadingEventArgs) =>
    
        if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
        
            urlLoadingEventArgs.UrlLoadingStrategy = UrlLoadingStrategy.OpenInWebView;
        
    ;

Perilaku perutean permintaan URI default:

  • Sebuah link adalah intern jika nama host dan skema cocok antara URI asal aplikasi dan URI permintaan. Ketika nama dan skema host tidak cocok atau jika tautannya disetel target="_blank"link dianggap luar.
  • Jika tautan internal, tautan dibuka di BlazorWebView oleh aplikasi.
  • Jika tautan bersifat eksternal, tautan dibuka oleh aplikasi yang ditentukan oleh perangkat berdasarkan penangan terdaftar perangkat untuk skema tautan.
  • Untuk tautan internal yang muncul untuk 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 Windows Forms: Konten halaman host dikembalikan.
    • .NET MAUI: Respons 404 dikembalikan.

Untuk mengubah perilaku penanganan tautan untuk tautan yang tidak disetel target="_blank"daftarkan UrlLoading acara dan atur UrlLoadingEventArgs.UrlLoadingStrategy Properti. Itu UrlLoadingStrategy enumeration 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 di 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.

Itu UrlLoadingEventArgs.Url properti digunakan untuk mendapatkan atau mengatur URL secara dinamis.

Peringatan

Secara default, tautan eksternal dibuka di aplikasi yang ditentukan oleh perangkat. Membuka tautan eksternal di dalam a BlazorWebView dapat memperkenalkan kerentanan keamanan dan harus bukan diaktifkan kecuali Anda dapat memastikan bahwa tautan eksternal sepenuhnya dipercaya.

ruang nama

Ruang nama Microsoft.AspNetCore.Components.WebView diperlukan untuk contoh dalam artikel ini:

using Microsoft.AspNetCore.Components.WebView;

Navigasi internal

Tambahkan event handler berikut ke konstruktor dari Page Dimana BlazorWebView dibuat, yaitu MainPage.xaml.cs dalam aplikasi yang dibuat dari template proyek .NET MAUI.

blazorWebView.UrlLoading += 
    (sender, urlLoadingEventArgs) =>
    
        if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
        
            urlLoadingEventArgs.UrlLoadingStrategy = 
                UrlLoadingStrategy.OpenInWebView;
        
    ;

Tambahkan UrlLoading="Handle_UrlLoading" atribut ke BlazorWebView kontrol di .xaml mengajukan:

<blazor:BlazorWebView HostPage="wwwroot\index.html" 
    Services="StaticResource services" 
    x:Name="blazorWebView" 
    UrlLoading="Handle_UrlLoading">

Tambahkan pengendali acara di .xaml.cs mengajukan:

private void Handle_UrlLoading(object sender, 
    UrlLoadingEventArgs urlLoadingEventArgs)

    if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
    
        urlLoadingEventArgs.UrlLoadingStrategy = UrlLoadingStrategy.OpenInWebView;
    

Dalam konstruktor formulir yang mengandung BlazorWebView kontrol, tambahkan pendaftaran acara berikut:

blazorWebView.UrlLoading += 
    (sender, urlLoadingEventArgs) =>
    
        if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
        
            urlLoadingEventArgs.UrlLoadingStrategy = 
                UrlLoadingStrategy.OpenInWebView;
        
    ;

Navigasi eksternal

Daftar ke ExternalNavigationStarting acara dan atur ExternalLinkNavigationEventArgs.ExternalLinkNavigationPolicy properti untuk mengubah perilaku navigasi.

Itu ExternalLinkNavigationPolicy enumeration mengatur perilaku navigasi:

  • OpenInExternalBrowser: Navigasikan ke tautan eksternal menggunakan browser default perangkat. Ini adalah kebijakan navigasi default.
  • InsecureOpenInWebView: Navigasikan ke tautan eksternal dalam Blazor WebView. Kebijakan navigasi ini dapat menimbulkan masalah keamanan dan tidak boleh diaktifkan kecuali Anda dapat memastikan bahwa semua tautan eksternal sepenuhnya tepercaya.
  • CancelNavigation: Membatalkan upaya navigasi saat ini.

Itu ExternalLinkNavigationEventArgs.Uri properti berisi URI tujuan.

Peringatan

Secara default, tautan eksternal dibuka di browser default perangkat. Membuka tautan eksternal dalam Blazor WebView (InsecureOpenInWebView) adalah tidak direkomendasikan kecuali konten tersebut sepenuhnya dipercaya.

Tambahkan event handler ke konstruktor halaman tempat BlazorWebView dibangun:

blazorWebView.ExternalNavigationStarting += 
    (sender, externalLinkNavigationEventArgs) =>
    
	    externalLinkNavigationEventArgs.ExternalLinkNavigationPolicy = 
            ExternalLinkNavigationPolicy.OpenInExternalBrowser;
    ;

Tambahkan ExternalNavigationStarting="Handle_ExternalNavigationStarting" atribut ke BlazorWebView kontrol di .xaml mengajukan:

<blazor:BlazorWebView HostPage="wwwroot\index.html" 
    Services="StaticResource services" 
    x:Name="blazorWebView" 
    ExternalNavigationStarting="Handle_ExternalNavigationStarting">

Tambahkan pengendali acara di .xaml.cs mengajukan:

private void Handle_ExternalNavigationStarting(object sender, 
    ExternalLinkNavigationEventArgs externalLinkNavigationEventArgs)

	externalLinkNavigationEventArgs.ExternalLinkNavigationPolicy = 
        ExternalLinkNavigationPolicy.OpenInExternalBrowser;

Dalam konstruktor formulir yang berisi BlazorWebView kontrol, tambahkan pendaftaran acara berikut:

blazorWebView.ExternalNavigationStarting += 
    (sender, externalLinkNavigationEventArgs) =>
    
        externalLinkNavigationEventArgs.ExternalLinkNavigationPolicy = 
            ExternalLinkNavigationPolicy.OpenInExternalBrowser;
    ;

By AKDSEO