Eseguire la migrazione da ASP.NET Core in .NET 7 a .NET 8
Questo articolo illustra come aggiornare un progetto ASP.NET Core 7.0 esistente a ASP.NET Core 8.0.
Prerequisiti
Visual Studio 2022 con il carico di lavoro Sviluppo ASP.NET e Web.
Aggiornare la versione di .NET SDK in global.json
Se si fa affidamento su un global.json
file per specificare una versione specifica di .NET Core SDK, aggiornare la version
proprietà alla versione di .NET 8.0 SDK installata. Ad esempio:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
Aggiornare il framework di destinazione
Aggiornare il moniker del framework di destinazione del file di progetto (TFM) a net8.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
Aggiornare i riferimenti del pacchetto
Nel file di progetto aggiornare ogni Microsoft.AspNetCore.*
attributo di riferimento al pacchetto Version
, Microsoft.EntityFrameworkCore.*
Microsoft.Extensions.*
, e System.Net.Http.Json
a 8.00 o versione successiva. Ad esempio:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.12" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.12" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
- <PackageReference Include="System.Net.Http.Json" Version="7.0.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="8.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="8.0.0" />
</ItemGroup>
Blazor
Vengono illustrati gli scenari di migrazione seguenti:
- Aggiornare un'app Blazor Server
- Adottare tutte le Blazor Web App convenzioni
- Convertire un'app Blazor Server in un Blazor Web App
- Aggiornare un'app Blazor WebAssembly
- Convertire un'app ospitata Blazor WebAssembly in un Blazor Web App
- Aggiornare la configurazione dell'opzione del servizio e dell'endpoint
- Eliminare Blazor Server con la soluzione alternativa di routing yarp
- Eseguire la migrazione dei
CascadingValue
componenti nei componenti di layout - Eseguire la migrazione della
BlazorEnableCompression
proprietà MSBuild - Eseguire la migrazione del
<CascadingAuthenticationState>
componente ai servizi di stato di autenticazione a catena - Nuovo articolo: Problemi di memorizzazione nella cache HTTP durante la migrazione
- Nuovo articolo: Nuovo articolo sulle librerie di classi con rendering statico lato server (SSR statico)
- Individuare i componenti da assembly aggiuntivi
- Eliminare
[Parameter]
l'attributo quando il parametro viene fornito da una stringa di query - Blazor Server Autorizzazione dei criteri di fallback script
Per indicazioni sull'aggiunta Blazor del supporto a un'app ASP.NET Core, vedere Integrare componenti ASP.NET Core Razor in app ASP.NET Core.
Aggiornare un'app Blazor Server
È consigliabile usare Blazor Web Apps in .NET 8, ma Blazor Server è supportato. Per continuare a usare Blazor Server con .NET 8, seguire le indicazioni riportate nelle prime tre sezioni di questo articolo:
- Aggiornare la versione di .NET SDK in
global.json
- Aggiornare il framework di destinazione
- Aggiornare i riferimenti ai pacchetti
Le nuove Blazor funzionalità introdotte per Blazor Web Apps non sono disponibili per un'app Blazor Server aggiornata per l'esecuzione in .NET 8. Per adottare le nuove funzionalità di .NET 8 Blazor , seguire le indicazioni riportate in una delle sezioni seguenti:
Adottare tutte le Blazor Web App convenzioni
Per adottare facoltativamente tutte le nuove Blazor Web App convenzioni, è consigliabile eseguire il processo seguente:
- Creare una nuova app dal modello di Blazor Web App progetto. Per altre informazioni, vedere Strumenti per ASP.NET Core Blazor.
- Spostare i componenti e il codice dell'app nel nuovo Blazor Web App, apportando modifiche per adottare nuove funzionalità.
- Aggiornare il layout e gli stili di Blazor Web App.
Le nuove funzionalità di .NET 8 sono illustrate in Novità di ASP.NET Core 8.0. Quando si aggiorna un'app da .NET 6 o versioni precedenti, vedere le note sulla migrazione e sulla versione (articoli novità ) per le versioni intermedie.
Convertire un'app Blazor Server in un Blazor Web App
Blazor Server Le app sono supportate in .NET 8 senza modifiche al codice. Usare le indicazioni seguenti per convertire un'app Blazor Server in un'equivalente .NET 8 Blazor Web App, che rende disponibili tutte le nuove funzionalità di .NET 8.
Importante
Questa sezione è incentrata sulle modifiche minime necessarie per convertire un'app .NET 7 Blazor Server in .NET 8 Blazor Web App. Per adottare tutte le nuove Blazor Web App convenzioni, seguire le indicazioni riportate nella sezione Adottare tutte le Blazor Web App convenzioni .
Seguire le indicazioni riportate nelle prime tre sezioni di questo articolo:
Spostare il contenuto del
App
componente () in un nuovoRoutes
file di componente (Routes.razor
App.razor
) aggiunto alla cartella radice del progetto. Lasciare il file vuotoApp.razor
nell'app nella cartella radice del progetto.Aggiungere una voce al
_Imports.razor
file per rendere disponibili le modalità di rendering abbreviate per l'app:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Spostare il contenuto nella
_Host
pagina (Pages/_Host.cshtml
) nel file vuotoApp.razor
. Procedere con le modifiche seguenti alApp
componente.Nota
Nell'esempio seguente lo spazio dei nomi del progetto è
BlazorServerApp
. Modificare lo spazio dei nomi in modo che corrisponda al progetto.Rimuovere le righe seguenti dall'inizio del file:
- @page "/" - @using Microsoft.AspNetCore.Components.Web - @namespace BlazorServerApp.Pages - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Sostituire le righe precedenti con una riga che inserisce un'istanza IHostEnvironment :
@inject IHostEnvironment Env
Rimuovere la tilde (
~
) dalhref
tag e sostituire con il percorso di base per l'app<base>
:- <base href="~/" /> + <base href="/" />
Rimuovere l'helper tag del componente per il HeadOutlet componente e sostituirlo con il HeadOutlet componente .
Rimuovere la riga seguente:
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
Sostituire la riga precedente con quanto segue:
<HeadOutlet @rendermode="InteractiveServer" />
Rimuovere l'helper tag del componente per il
App
componente e sostituirlo con ilRoutes
componente .Rimuovere la riga seguente:
- <component type="typeof(App)" render-mode="ServerPrerendered" />
Sostituire la riga precedente con quanto segue:
<Routes @rendermode="InteractiveServer" />
Nota
La configurazione precedente presuppone che i componenti dell'app adottino il rendering interattivo del server. Per altre informazioni, tra cui come adottare il rendering lato server statico (SSR), vedere ASP.NET modalità di rendering coreBlazor.
Rimuovere gli helper tag di ambiente per l'interfaccia utente degli errori e sostituirli con il markup seguente Razor .
Rimuovere le righe seguenti:
- <environment include="Staging,Production"> - An error has occurred. This application may no longer respond until reloaded. - </environment> - <environment include="Development"> - An unhandled exception has occurred. See browser dev tools for details. - </environment>
Sostituire le righe precedenti con quanto segue:
@if (Env.IsDevelopment()) { <text> An unhandled exception has occurred. See browser dev tools for details. </text> } else { <text> An error has occurred. This app may no longer respond until reloaded. </text> }
Modificare lo Blazor script da
blazor.server.js
ablazor.web.js
:- <script src="_framework/blazor.server.js"></script> + <script src="_framework/blazor.web.js"></script>
Eliminare il file
Pages/_Host.cshtml
.Aggiornamento
Program.cs
:Nota
Nell'esempio seguente lo spazio dei nomi del progetto è
BlazorServerApp
. Modificare lo spazio dei nomi in modo che corrisponda al progetto.Aggiungere un'istruzione
using
all'inizio del file per lo spazio dei nomi del progetto:using BlazorServerApp;
Sostituire AddServerSideBlazor con AddRazorComponents e una chiamata concatenato a AddInteractiveServerComponents.
Rimuovere la riga seguente:
- builder.Services.AddServerSideBlazor();
Sostituire la riga precedente con Razor i servizi componente e componenti server interattivi. La chiamata AddRazorComponents aggiunge servizi antiforgery () perAddAntiforgery impostazione predefinita.
builder.Services.AddRazorComponents() .AddInteractiveServerComponents();
Rimuovere la riga seguente:
- app.MapBlazorHub();
Sostituire la riga precedente con una chiamata a MapRazorComponents, specificando il
App
componente come tipo di componente radice e aggiungendo una chiamata concatenato a AddInteractiveServerRenderMode:app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();
Rimuovere la riga seguente:
- app.MapFallbackToPage("/_Host");
Rimuovere il middleware di routing:
- app.UseRouting();
Aggiungere il middleware antiforgery alla pipeline di elaborazione delle richieste dopo la riga che aggiunge il middleware di reindirizzamento HTTPS (
app.UseHttpsRedirection
):app.UseAntiforgery();
La chiamata precedente a
app.UseAntiforgery
deve essere inserita dopo le chiamate, se presenti, aapp.UseAuthentication
eapp.UseAuthorization
. Non è necessario aggiungere in modo esplicito i servizi antiforgery (builder.Services.AddAntiforgery
), perché vengono aggiunti automaticamente da AddRazorComponents, che è stato trattato in precedenza.Se l'app Blazor Server è stata configurata per disabilitare il prerendering, è possibile continuare a disabilitare la prerendering per l'app aggiornata.
App
Nel componente modificare il valore assegnato agli attributi della@rendermode
Razor direttiva per i HeadOutlet componenti eRoutes
.Modificare il valore dell'attributo
@rendermode
di direttiva per entrambi i componenti eRoutes
per disabilitare la HeadOutlet prerendering:- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"
Per altre informazioni, vedere ASP.NET Modalità di rendering coreBlazor.
Aggiornare un'app Blazor WebAssembly
Seguire le indicazioni riportate nelle prime tre sezioni di questo articolo:
- Aggiornare la versione di .NET SDK in
global.json
- Aggiornare il framework di destinazione
- Aggiornare i riferimenti ai pacchetti
Per le app che adottano il caricamento di assembly differita, modificare l'estensione di file da .dll
a .wasm
nell'implementazione dell'app in modo da riflettere Blazor WebAssemblyl'adozione della creazione di pacchetti di assembly Webcil.
Prima del rilascio di .NET 8, linee guida in Layout di distribuzione per le app ospitate Blazor WebAssembly di ASP.NET Core indirizzano gli ambienti che impediscono ai client di scaricare ed eseguire DLL con un approccio di bundle multipart. In .NET 8 o versioni successive Blazor usa il formato di file Webcil per risolvere il problema. La creazione di bundle in più parti con il pacchetto NuGet sperimentale descritto dall'articolo layout di distribuzione WebAssembly non è supportata per Blazor le app in .NET 8 o versioni successive. Se si vuole continuare a usare il pacchetto bundle multipart nelle app .NET 8 o successive, è possibile usare le indicazioni contenute nell'articolo per creare un pacchetto NuGet multipart bundling, ma non sarà supportato da Microsoft.
Convertire un'app ospitata Blazor WebAssembly in un Blazor Web App
Blazor WebAssembly Le app sono supportate in .NET 8 senza modifiche al codice. Usare le indicazioni seguenti per convertire un'app ospitata Blazor WebAssembly ASP.NET Core in un'app .NET 8 Blazor Web Appequivalente, che rende disponibili tutte le nuove funzionalità di .NET 8.
Importante
Questa sezione è incentrata sulle modifiche minime necessarie per convertire un'app ospitata Blazor WebAssembly .NET 7 ASP.NET Core in .NET 8 Blazor Web App. Per adottare tutte le nuove Blazor Web App convenzioni, seguire le indicazioni riportate nella sezione Adottare tutte le Blazor Web App convenzioni .
Seguire le indicazioni riportate nelle prime tre sezioni di questo articolo:
- Aggiornare la versione di .NET SDK in
global.json
- Aggiornare il framework di destinazione
- Aggiornare i riferimenti ai pacchetti
Importante
Usando le indicazioni precedenti, aggiornare i
.Client
progetti ,.Server
e.Shared
della soluzione.- Aggiornare la versione di .NET SDK in
Nel file di
.Client
progetto (.csproj
) aggiungere le proprietà MSBuild seguenti:<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
Nel file di
.Client
progetto rimuovere anche il riferimento alMicrosoft.AspNetCore.Components.WebAssembly.DevServer
pacchetto:- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
Spostare il contenuto del
.Client/wwwroot/index.html
file dal file in un nuovoApp
file componente (App.razor
) creato nella radice del.Server
progetto. Dopo aver spostato il contenuto del file, eliminare ilindex.html
file.Rinominare
App.razor
nel.Client
progetto inRoutes.razor
.In
Routes.razor
aggiornare il valore dell'attributoAppAssembly
intypeof(Program).Assembly
..Client
Nel progetto aggiungere una voce al_Imports.razor
file per rendere disponibili le modalità di rendering abbreviate per l'app:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Creare una copia del
.Client
file del_Imports.razor
progetto e aggiungerla al.Server
progetto.Apportare le modifiche seguenti al
App.razor
file:Sostituire il titolo predefinito del sito Web (
<title>...</title>
) del sito Web con un HeadOutlet componente. Prendere nota del titolo del sito Web da usare in seguito e rimuovere i tag e il titolo del titolo:- <title>...</title>
Dove è stato rimosso il titolo, posizionare un HeadOutlet componente assegnando la modalità di rendering Interactive WebAssembly (prerendering disabilitato):
<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Modificare il bundle di stile CSS:
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet"> + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
Segnaposto nel codice precedente:
{CLIENT PROJECT ASSEMBLY NAME}
: nome dell'assembly del progetto client. Esempio:BlazorSample.Client
{SERVER PROJECT ASSEMBLY NAME}
: nome dell'assembly del progetto server. Esempio:BlazorSample.Server
Individuare il markup HTML seguente
<div>...</div>
:- <div id="app"> - ... - </div>
Sostituire il markup HTML precedente
<div>...</div>
con ilRoutes
componente usando la modalità di rendering Interactive WebAssembly (prerendering disabilitato):<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Aggiornare lo
blazor.webassembly.js
script inblazor.web.js
:- <script src="_framework/blazor.webassembly.js"></script> + <script src="_framework/blazor.web.js"></script>
Aprire il
.Client
file di layout del progetto (.Client/Shared/MainLayout.razor
) e aggiungere un PageTitle componente con il titolo predefinito del sito Web ({TITLE}
segnaposto):<PageTitle>{TITLE}</PageTitle>
Nota
Anche altri file di layout devono ricevere un PageTitle componente con il titolo predefinito del sito Web.
Per altre informazioni, vedere Controllare il contenuto head nelle app ASP.NET CoreBlazor.
Rimuovere le righe seguenti da
.Client/Program.cs
:- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");
Aggiornamento
.Server/Program.cs
:Aggiungere Razor servizi componenti e componenti WebAssembly interattivi al progetto. Chiamare AddRazorComponents con una chiamata concatenata a AddInteractiveWebAssemblyComponents. La chiamata AddRazorComponents aggiunge servizi antiforgery () perAddAntiforgery impostazione predefinita.
builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();
Aggiungere il middleware antiforgery alla pipeline di elaborazione delle richieste.
Posizionare la riga seguente dopo la chiamata a
app.UseHttpsRedirection
. La chiamata aapp.UseAntiforgery
deve essere effettuata dopo le chiamate, se presenti, aapp.UseAuthentication
eapp.UseAuthorization
. Non è necessario aggiungere in modo esplicito i servizi antiforgery (builder.Services.AddAntiforgery
), perché vengono aggiunti automaticamente da AddRazorComponents, che è stato trattato in precedenza.app.UseAntiforgery();
Rimuovere la riga seguente:
- app.UseBlazorFrameworkFiles();
Rimuovere la riga seguente:
- app.MapFallbackToFile("index.html");
Sostituire la riga precedente con una chiamata a MapRazorComponents, specificando il
App
componente come tipo di componente radice e aggiungendo chiamate concatenati a AddInteractiveWebAssemblyRenderMode e AddAdditionalAssemblies:app.MapRazorComponents<App>() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
Nell'esempio precedente il
{CLIENT APP NAMESPACE}
segnaposto è lo spazio dei nomi del.Client
progetto , ad esempioHostedBlazorApp.Client
.Eseguire la soluzione dal
.Server
progetto:Per Visual Studio, verificare che il
.Server
progetto sia selezionato in Esplora soluzioni durante l'esecuzione dell'app.Se si usa l'interfaccia della riga di comando di .NET, eseguire il progetto dalla
.Server
cartella del progetto.
Aggiornare la configurazione dell'opzione del servizio e dell'endpoint
Con il rilascio di s in .NET 8, Blazor la configurazione delle Blazor Web Appopzioni del servizio e dell'endpoint viene aggiornata con l'introduzione della nuova API per i servizi componenti interattivi e la configurazione dell'endpoint del componente.
Le indicazioni sulla configurazione aggiornate vengono visualizzate nei percorsi seguenti:
- Impostazione e lettura dell'ambiente dell'app: contiene indicazioni aggiornate, in particolare nella sezione intitolata Leggi il lato client dell'ambiente in un oggetto Blazor Web App.
- Opzioni del gestore del circuito sul lato server: copre la configurazione delle opzioni del BlazorSignalR circuito e dell'hub.
- Eseguire il rendering Razor dei componenti da JavaScript: illustra la registrazione dinamica dei componenti con RegisterForJavaScript.
- Blazorelementi personalizzati: registrazione: Blazor Web App copre la registrazione dell'elemento personalizzato del componente radice con
RegisterCustomElement
. - Prefisso per Blazor WebAssembly gli asset: copre il controllo della stringa di percorso che indica il prefisso per Blazor WebAssembly gli asset.
- Durata della validità dell'URL di reindirizzamento temporaneo: copre il controllo della durata della validità della protezione dei dati per gli URL di reindirizzamento temporanei generati dal Blazor rendering lato server.
- Errori dettagliati: illustra l'abilitazione di errori dettagliati per il Razor rendering lato server dei componenti.
- Prerendering della configurazione: il prerendering è abilitato per impostazione predefinita per Blazor Web Apps. Seguire questo collegamento per indicazioni su come disabilitare la prerendering se si hanno circostanze speciali che richiedono che un'app disabiliti la pre-gestione.
- Opzioni di associazione del modulo: illustra la configurazione delle opzioni di associazione del modulo.
Eliminare Blazor Server con la soluzione alternativa di routing yarp
Se in precedenza sono state seguite le indicazioni riportate in Abilitare il supporto di ASP.NET Core Blazor Server con Yarp nella migrazione incrementale di un'app Blazor Server con Yarp a .NET 6 o .NET 7, è possibile invertire i passaggi per la soluzione alternativa eseguiti seguendo le indicazioni dell'articolo. Il routing e il deep linking per Blazor Server con Yarp funzionano correttamente in .NET 8.
Eseguire la migrazione dei CascadingValue
componenti nei componenti di layout
I parametri a catena non passano i dati tra i limiti della modalità di rendering e i layout vengono sottoposti a rendering statico in app altrimenti interattive. Pertanto, le app che cercano di usare parametri a catena nei componenti di cui è stato eseguito il rendering interattivo non saranno in grado di propagare i valori da un layout.
I due approcci per la migrazione sono:
- (Consigliato) Passare lo stato come valore a cascata a livello radice. Per altre informazioni, vedere Valori a catena a livello di radice.
- Eseguire il wrapping del router nel
Routes
componente con ilCascadingValue
componente e rendere interattivo il rendering delRoutes
componente. Per un esempio, vedereCascadingValue
componente.
Per altre informazioni, vedere Valori/parametri a catena e limiti della modalità di rendering.
Eseguire la migrazione della BlazorEnableCompression
proprietà MSBuild
Per Blazor WebAssembly le app che disabilitano la compressione e la destinazione di .NET 7 o versioni precedenti, ma vengono compilate con .NET 8 SDK, la BlazorEnableCompression
proprietà MSBuild è stata modificata in CompressionEnabled
:
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
Quando si usa il comando publish dell'interfaccia della riga di comando di .NET, usare la nuova proprietà :
dotnet publish -p:CompressionEnabled=false
Per ulteriori informazioni, vedi le seguenti risorse:
- Modifica che causa un'interruzione del flag di compressione degli asset Web statici (dotnet/announcements #283)
- Ospitare e distribuire ASP.NET Core Blazor WebAssembly
Eseguire la migrazione del <CascadingAuthenticationState>
componente ai servizi di stato di autenticazione a catena
In .NET 7 o versioni precedenti, il CascadingAuthenticationState componente viene incluso in una parte dell'albero dell'interfaccia utente, ad esempio intorno al Blazor router, per fornire lo stato di autenticazione a catena:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
In .NET 8 non usare il CascadingAuthenticationState componente:
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Aggiungere invece servizi di stato di autenticazione a catena alla raccolta di servizi chiamando AddCascadingAuthenticationState nel Program
file:
builder.Services.AddCascadingAuthenticationState();
Per ulteriori informazioni, vedi le seguenti risorse:
- ASP.NET articolo Autenticazione e autorizzazione di base Blazor
- Proteggere le app sul lato Blazor server ASP.NET Core
Nuovo articolo sui problemi di memorizzazione nella cache HTTP
È stato aggiunto un nuovo articolo che illustra alcuni dei problemi comuni di memorizzazione nella cache HTTP che possono verificarsi durante l'aggiornamento Blazor delle app tra le versioni principali e come risolvere i problemi di memorizzazione nella cache HTTP.
Per altre informazioni, vedere Evitare problemi di memorizzazione nella cache HTTP durante l'aggiornamento delle app ASP.NET CoreBlazor.
Nuovo articolo sulle librerie di classi con rendering statico lato server (SSR statico)
È stato aggiunto un nuovo articolo che illustra l'autorizzazione della libreria dei componenti nelle Razor librerie di classi (RCL) con il rendering statico lato server (SSR statico).
Per altre informazioni, vedere ASP.NET Librerie di classi core Razor con rendering statico lato server (SSR statico).
Individuare i componenti da assembly aggiuntivi
Quando si esegue la migrazione da un'app Blazor Server a un Blazor Web App, accedere alle linee guida in ASP.NET routing e navigazione core Blazor se l'app usa componenti instradabili da assembly aggiuntivi, ad esempio librerie di classi dei componenti.
Eliminare [Parameter]
l'attributo quando il parametro viene fornito da una stringa di query
L'attributo [Parameter]
non è più necessario quando si specifica un parametro dalla stringa di query:
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server Autorizzazione dei criteri di fallback script
In .NET 7 lo Blazor Server script (blazor.server.js
) viene gestito dal middleware dei file statici. L'inserimento della chiamata al middleware per i file statici (UseStaticFiles) nella pipeline di elaborazione delle richieste prima della chiamata al middleware di autorizzazione (UseAuthorization) è sufficiente nelle app .NET 7 per gestire lo Blazor script agli utenti anonimi.
In .NET 8 lo script viene gestito dal proprio endpoint, usando il Blazor Server routing degli endpoint. Questa modifica è stata introdotta dal bug risolto: il passaggio di opzioni a UseStaticFiles interrompe Blazor Server (dotnet/aspnetcore
#45897).
Si consideri uno scenario multi-tenant in cui:
- I criteri predefiniti e di fallback vengono impostati in modo identico.
- Il tenant viene risolto usando il primo segmento nel percorso della richiesta , ad esempio
tld.com/tenant-name/...
. - Le richieste agli endpoint tenant vengono autenticate da uno schema di autenticazione aggiuntivo, che aggiunge un ulteriore identity all'entità richiesta.
- I criteri di autorizzazione di fallback hanno requisiti che controllano le attestazioni tramite l'oggetto aggiuntivo identity.
Le richieste per il Blazor file di script (blazor.server.js
) vengono gestite in /_framework/blazor.server.js
, hardcoded nel framework. Le richieste per il file non vengono autenticate dallo schema di autenticazione aggiuntivo per i tenant, ma vengono comunque richieste dai criteri di fallback, il che comporta la restituzione di un risultato non autorizzato.
Questo problema è in fase di valutazione per una nuova funzionalità del framework in MapRazorComponents interrotta con FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore
51836), attualmente pianificato per la versione di .NET 9 nel novembre 2024. Fino ad allora, è possibile risolvere questo problema usando uno dei tre approcci seguenti:
Non usare criteri di fallback. Applicare l'attributo
[Authorize]
nel_Imports.razor
file per applicarlo a tutti i componenti dell'app. Per gli endpoint nonblazor , usare[Authorize]
in modo esplicito oRequireAuthorization
.Aggiungere
[AllowAnonymous]
all'endpoint/_framework/blazor.server.js
nelProgram
file:app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });
Registrare un oggetto personalizzato
AuthorizationHandler
che controlla l'oggettoHttpContext
per consentire il/_framework/blazor.server.js
file.
Docker
Aggiornare le immagini Docker
Per le app che usano Docker, aggiornare le istruzioni e gli script DockerfileFROM
. Usare un'immagine di base che include il runtime di ASP.NET Core 8.0. Si consideri la differenza di comando seguente docker pull
tra ASP.NET Core 7.0 e 8.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Aggiornare la porta Docker
La porta predefinita ASP.NET Core configurata nelle immagini del contenitore .NET è stata aggiornata dalla porta 80 alla porta 8080.
La nuova ASPNETCORE_HTTP_PORTS
variabile di ambiente è stata aggiunta come alternativa più semplice a ASPNETCORE_URLS
.
Per altre informazioni, vedi:
- Il valore predefinito ASP.NET porta Core è stata modificata da 80 a 8080.
- Specificare solo le porte con
ASPNETCORE_HTTP_PORTS
Rivedere le modifiche che causano un'interruzione
Per modifiche di rilievo da .NET Core .NET 7.0 a 8.0, vedere Modifiche di rilievo in .NET 8, incluse le sezioni ASP.NET Core e Entity Framework Core .