ASP.NET Core Blazor Hybrid

Nota

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 8 di questo articolo.

Avviso

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere Criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 8 di questo articolo.

Importante

Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.

Per la versione corrente, vedere la versione .NET 8 di questo articolo.

Questo articolo illustra ASP.NET Core Blazor Hybrid, un modo per creare un'interfaccia utente Web sul lato client interattiva con .NET in un'app ASP.NET Core.

Usare Blazor Hybrid per integrare framework client nativi desktop e per dispositivi mobili con .NET e Blazor.

In un'app Blazor Hybrid i componenti di Razor vengono eseguiti in modo nativo nel dispositivo. I componenti eseguono il rendering in un controllo Web View incorporato tramite un canale di interoperabilità locale. I componenti non vengono eseguiti nel browser e WebAssembly non è coinvolto. I componenti di Razor caricano ed eseguono il codice rapidamente e hanno accesso completo alle funzionalità native del dispositivo tramite la piattaforma .NET. Gli stili dei componenti di cui viene eseguito il rendering in un Web View oggetto sono dipendenti dalla piattaforma e possono richiedere di tenere conto delle differenze di rendering tra le piattaforme usando fogli di stile personalizzati.

Gli articoli su Blazor Hybrid trattano argomenti relativi all'integrazione dei componenti di Razor nei framework client nativi.

App Blazor Hybrid con .NET MAUI

Il supporto di Blazor Hybrid è integrato nel framework .NET Multi-platform App UI (.NET MAUI). .NET MAUI include il controllo BlazorWebView che consente il rendering dei componenti di Razor in una Web View incorporata. Usando .NET MAUI e Blazor insieme, è possibile riutilizzare un set di componenti dell'interfaccia utente Web in dispositivi mobili, desktop e Web.

App Blazor Hybrid con WPF e Windows Form

Le app Blazor Hybrid possono essere compilate con Windows Presentation Foundation (WPF) e Windows Form. Blazorfornisce BlazorWebView controlli per entrambi questi framework (WPF BlazorWebView, Windows Form BlazorWebView). I componenti di Razor vengono eseguiti in modo nativo nel desktop Windows ed eseguono il rendering in una Web View incorporata. L'uso di Blazor in WPF e Windows Form consente di aggiungere una nuova interfaccia utente alle app desktop Windows esistenti, che può essere riutilizzata nelle diverse piattaforme con .NET MAUI o sul Web.

Configurazione Web View

Blazor Hybrid espone la configurazione Web View sottostante per piattaforme diverse attraverso gli eventi del controllo BlazorWebView:

  • BlazorWebViewInitializing consente di accedere alle impostazioni usate per creare la Web View in ogni piattaforma, se le impostazioni sono disponibili.
  • BlazorWebViewInitialized fornisce l'accesso alla Web View per consentire un'ulteriore configurazione delle impostazioni.

Usare i modelli preferiti in ogni piattaforma per collegare i gestori eventi agli eventi per eseguire il codice personalizzato.

Documentazione dell'API:

Eccezioni non gestite nelle app Windows Form e WPF

Questa sezione si applica solo alle app Windows Form e WPFBlazor Hybrid.

Creare un callback per UnhandledException nella System.AppDomain.CurrentDomain proprietà . Nell'esempio seguente viene utilizzata una direttiva del compilatore per visualizzare un MessageBox che avvisa l'utente che si è verificato un errore o che mostra le informazioni sull'errore per lo sviluppatore. Registrare le informazioni sull'errore in error.ExceptionObject.

AppDomain.CurrentDomain.UnhandledException += (sender, error) =>
{
#if DEBUG
    MessageBox.Show(text: error.ExceptionObject.ToString(), caption: "Error");
#else
    MessageBox.Show(text: "An error has occurred.", caption: "Error");
#endif
    
    // Log the error information (error.ExceptionObject)
};

Globalizzazione e localizzazione

Questa sezione si applica solo alle .NET MAUIBlazor Hybrid app.

.NET MAUI configura e CurrentCulture CurrentUICulture in base alle informazioni di ambiente del dispositivo.

IStringLocalizer e altre API nello Microsoft.Extensions.Localization spazio dei nomi funzionano in genere come previsto, insieme alla formattazione della globalizzazione, all'analisi e all'associazione che si basa sulle impostazioni cultura dell'utente.

Quando si modificano dinamicamente le impostazioni cultura dell'app in fase di esecuzione, l'app deve essere ricaricata per riflettere la modifica delle impostazioni cultura, che si occupa di eseguire il rendering del componente radice e di passare le nuove impostazioni cultura ai componenti figlio riabilitabili.

. Il sistema di risorse di NET supporta l'incorporamento di immagini localizzate (come BLOB) in un'app, ma Blazor Hybrid non può visualizzare le immagini incorporate nei Razor componenti in questo momento. Anche se un utente legge i byte di un'immagine in un Stream oggetto usando ResourceManager, il framework attualmente non supporta il rendering dell'immagine recuperata in un Razor componente.

Un approccio specifico della piattaforma per includere immagini localizzate è una funzionalità di . Il sistema di risorse di NET, ma gli elementi del browser di un Razor componente in un'app .NET MAUIBlazor Hybrid non sono in grado di interagire con tali immagini.

Per ulteriori informazioni, vedi le seguenti risorse:

Accedere ai servizi con ambito dall'interfaccia utente nativa

BlazorWebView dispone di un TryDispatchAsync metodo che chiama un oggetto specificato Action<ServiceProvider> in modo asincrono e passa i servizi con ambito disponibili nei Razor componenti. In questo modo il codice dall'interfaccia utente nativa può accedere ai servizi con ambito, NavigationManagerad esempio :

private async void MyMauiButtonHandler(object sender, EventArgs e)
{
    var wasDispatchCalled = await _blazorWebView.TryDispatchAsync(sp =>
    {
        var navMan = sp.GetRequiredService<NavigationManager>();
        navMan.CallSomeNavigationApi(...);
    });

    if (!wasDispatchCalled)
    {
        ...
    }
}

Quando wasDispatchCalled è false, considerare cosa fare se la chiamata non è stata inviata. In genere, l'invio non dovrebbe avere esito negativo. In caso di errore, le risorse del sistema operativo potrebbero essere esaurite. Se le risorse sono esaurite, prendere in considerazione la registrazione di un messaggio, la generazione di un'eccezione e, ad esempio, l'avviso dell'utente.

Risorse aggiuntive