Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u een bestaand ASP.NET Core in .NET 7-project bijwerkt naar .NET 8.
Vereiste voorwaarden
Visual Studio 2022 met de workload voor ASP.NET en webontwikkeling.
De .NET SDK-versie bijwerken in global.json
Als u afhankelijk bent van een global.json
bestand om een specifieke .NET Core SDK-versie te targeten, werkt u de version
eigenschap bij naar de .NET 8 SDK-versie die is geïnstalleerd. Voorbeeld:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
Het doelframework bijwerken
Werk de Target Framework Moniker (TFM)- van het projectbestand bij naar net8.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
Pakketverwijzingen bijwerken
Werk in het projectbestand de Microsoft.AspNetCore.*
-eigenschap bij van elke Microsoft.EntityFrameworkCore.*
, Microsoft.Extensions.*
, System.Net.Http.Json
en Version
pakketreferentie naar 8.0.0 of hoger. Voorbeeld:
<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
De volgende migratiescenario's worden behandeld:
- Een app bijwerken Blazor Server
- Blazor Web App Alle conventies aannemen
- Blazor Server Een app converteren naar eenBlazor Web App
- Een app bijwerken Blazor WebAssembly
- Een gehoste Blazor WebAssembly app converteren naar een Blazor Web App
- Configuratie van service- en eindpuntopties bijwerken
- Tijdelijke oplossing voor verwijderen Blazor Server met Yarp-routering
-
Onderdelen migreren
CascadingValue
in indelingsonderdelen -
De MSBuild-eigenschap
BlazorEnableCompression
migreren -
Migreer het
<CascadingAuthenticationState>
onderdeel naar trapsgewijze authenticatiestatusservices - Nieuw artikel: Problemen met HTTP-caching tijdens migratie
- Nieuw artikel: Nieuw artikel over klassebibliotheken met statische rendering aan serverzijde (statische SSR)
- Ontdek onderdelen van aanvullende assemblages
-
Kenmerk neerzetten
[Parameter]
wanneer de parameter wordt opgegeven uit een queryreeks - Blazor Server autorisatie van scriptterugvalbeleid
Zie Blazor voor hulp bij het toevoegen Razor van ondersteuning aan een ASP.NET Core-app.
Een app bijwerken Blazor Server
Het wordt aanbevolen om Blazor Web App te gebruiken in .NET 8, maar Blazor Server wordt ook ondersteund. Als u Blazor Server wilt blijven gebruiken met .NET 8, volgt u de richtlijnen in de eerste drie afdelingen van dit artikel:
-
De .NET SDK-versie bijwerken in
global.json
- Het doelframework bijwerken
- Pakketverwijzingen bijwerken
Nieuwe Blazor functies die zijn geïntroduceerd voor Blazor Web Apps, zijn niet beschikbaar voor een Blazor Server app die wordt bijgewerkt voor uitvoering onder .NET 8. Als u de nieuwe .NET 8-functies Blazor wilt gebruiken, volgt u de richtlijnen in een van de volgende secties:
Blazor Web App Alle conventies aannemen
Als u eventueel alle nieuwe Blazor Web App conventies wilt overnemen, raden we het volgende proces aan:
- Maak een nieuwe app op basis van de Blazor Web App projectsjabloon. Zie Hulpprogramma's voor ASP.NET Core Blazorvoor meer informatie.
- Verplaats de onderdelen en code van uw app naar de nieuwe Blazor Web Appen breng wijzigingen aan om nieuwe functies aan te passen.
- Wijzig de indeling en stijlen van de Blazor Web App.
Nieuwe .NET 8-functies worden behandeld in wat er nieuw is in ASP.NET Core in .NET 8. Als u een app bijwerkt vanaf .NET 6 of eerder, raadpleegt u de migratie- en releaseopmerkingen (nieuwe artikelen) voor tussenliggende releases.
Blazor Server Een app converteren naar eenBlazor Web App
Blazor Server apps worden ondersteund in .NET 8 zonder codewijzigingen. Gebruik de volgende richtlijnen om een Blazor Server app te converteren naar een equivalente .NET 8 Blazor Web App, waardoor alle nieuwe .NET 8-functies beschikbaar zijn.
Belangrijk
Deze sectie is gericht op de minimale wijzigingen die nodig zijn om een .NET 7-app Blazor Server te converteren naar een .NET 8 Blazor Web App. Als u alle nieuwe Blazor Web App conventies wilt aannemen, volgt u de richtlijnen in de sectie Alle Blazor Web App conventies aannemen .
Volg de richtlijnen in de eerste drie secties van dit artikel:
Verplaats de inhoud van het
App
onderdeel (App.razor
) naar een nieuwRoutes
onderdeelbestand (Routes.razor
) dat is toegevoegd aan de hoofdmap van het project. Laat het legeApp.razor
bestand in de app in de hoofdmap van het project staan.Voeg een vermelding toe aan het
_Imports.razor
bestand om korte weergavemodi beschikbaar te maken voor de app:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Verplaats de inhoud op de
_Host
pagina (Pages/_Host.cshtml
) naar het legeApp.razor
bestand. Ga verder met het aanbrengen van de volgende wijzigingen in hetApp
onderdeel.Opmerking
In het volgende voorbeeld is
BlazorServerApp
de naamruimte van het project. Pas de naamruimte aan zodat deze overeenkomt met uw project.Verwijder de volgende regels boven aan het bestand:
- @page "/" - @using Microsoft.AspNetCore.Components.Web - @namespace BlazorServerApp.Pages - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Vervang de voorgaande regels door een regel die een IHostEnvironment exemplaar injecteert:
@inject IHostEnvironment Env
Verwijder de tilde (
~
) uit dehref
<base>
tag en vervang deze door het basispad voor uw app:- <base href="~/" /> + <base href="/" />
Verwijder de Component Tag Helper voor het HeadOutlet onderdeel en vervang het door het HeadOutlet onderdeel.
Verwijder de volgende regel:
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
Vervang de voorgaande regel door het volgende:
<HeadOutlet @rendermode="InteractiveServer" />
Verwijder de Component Tag Helper voor het
App
onderdeel en vervang het door hetRoutes
onderdeel.Verwijder de volgende regel:
- <component type="typeof(App)" render-mode="ServerPrerendered" />
Vervang de voorgaande regel door het volgende:
<Routes @rendermode="InteractiveServer" />
Opmerking
In de voorgaande configuratie wordt ervan uitgegaan dat de onderdelen van de app interactieve serverweergave aannemen. Zie ASP.NET Core-rendermodi Blazorvoor meer informatie, waaronder het gebruik van statische SSR (Static Server Side Rendering).
Verwijder de Environment Tag Helpers voor error gebruikersinterface en vervang deze door de volgende Razor markup.
Verwijder de volgende regels:
- <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>
Vervang de voorgaande regels door het volgende:
@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> }
Wijzig het Blazor script van
blazor.server.js
:blazor.web.js
- <script src="_framework/blazor.server.js"></script> + <script src="_framework/blazor.web.js"></script>
Verwijder het
Pages/_Host.cshtml
bestand.Program.cs
bijwerken:Opmerking
In het volgende voorbeeld is
BlazorServerApp
de naamruimte van het project. Pas de naamruimte aan zodat deze overeenkomt met uw project.Voeg een
using
instructie toe aan het begin van het bestand voor de naamruimte van het project:using BlazorServerApp;
Vervang AddServerSideBlazor door AddRazorComponents en een gechainede aanroep naar AddInteractiveServerComponents.
Verwijder de volgende regel:
- builder.Services.AddServerSideBlazor();
Vervang de voorgaande regel door Razor onderdeel- en interactieve serveronderdeelservices. Aanroepen AddRazorComponents voegt standaard antivervalsingsservices (AddAntiforgery) toe.
builder.Services.AddRazorComponents() .AddInteractiveServerComponents();
Verwijder de volgende regel:
- app.MapBlazorHub();
Vervang de voorgaande regel door een aanroep aan MapRazorComponents, waarbij het
App
onderdeel wordt opgeven als het hoofdonderdeeltype en voeg een gekoppelde aanroep toe aan AddInteractiveServerRenderMode:app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();
Verwijder de volgende regel:
- app.MapFallbackToPage("/_Host");
Middleware voor routering verwijderen:
- app.UseRouting();
Voeg Antiforgery Middleware toe aan de aanvraagverwerkingspijplijn na de regel die HTTPS Redirection Middleware (
app.UseHttpsRedirection
) toevoegt:app.UseAntiforgery();
De voorafgaande aanroep
app.UseAntiforgery
moet, indien aanwezig, worden geplaatst na de oproep aanapp.UseAuthentication
enapp.UseAuthorization
. Het is niet nodig om expliciet antivervalsingservices toe te voegen (builder.Services.AddAntiforgery
), omdat ze automatisch worden toegevoegd door AddRazorComponents, wat eerder is besproken.Als de Blazor Server app is geconfigureerd om prerendering uit te schakelen, kunt u doorgaan met het uitschakelen van prerendering voor de bijgewerkte app. Wijzig in het
App
onderdeel de waarde die is toegewezen aan de@rendermode
Razor instructiekenmerken voor de HeadOutlet enRoutes
onderdelen.Wijzig de waarde van het
@rendermode
-instructiekenmerk voor zowel de HeadOutlet- als deRoutes
-componenten om prerendering uit te schakelen.- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"
Zie ASP.NET Core-rendermodi Blazorvoor meer informatie.
Een app bijwerken Blazor WebAssembly
Volg de richtlijnen in de eerste drie secties van dit artikel:
-
De .NET SDK-versie bijwerken in
global.json
- Het doelframework bijwerken
- Pakketverwijzingen bijwerken
Voor apps die lazy assembly lading gebruiken, verander de bestandsextensie van .dll
naar .wasm
in de implementatie van de app, zodat deze overeenkomt met Blazor WebAssembly's gebruik van Webcil assembly verpakking.
Voorafgaand aan de release van .NET 8, biedt de richtlijn in voor de implementatie-indeling van ASP.NET Core-gehoste Blazor WebAssembly-apps omgevingen een aanpak met meerdere bundelingen om te voorkomen dat clients DLL's kunnen downloaden en uitvoeren. In .NET 8 of hoger gebruikt Blazor de bestandsindeling webcil om dit probleem op te lossen. Bundeling met meerdere onderdelen met behulp van het experimentele NuGet-pakket dat wordt beschreven door de webassembly-implementatieindeling artikel wordt niet ondersteund voor Blazor-apps in .NET 8 of hoger. Als u het pakket met meerdere onderdelen in .NET 8 of hoger wilt blijven gebruiken, kunt u de richtlijnen in het artikel gebruiken om uw eigen bundelpakket met meerdere onderdelen te maken, maar dit wordt niet ondersteund door Microsoft.
Een gehoste Blazor WebAssembly app converteren naar een Blazor Web App
Blazor WebAssembly apps worden ondersteund in .NET 8 zonder codewijzigingen. Gebruik de volgende richtlijnen om een ASP.NET Core gehoste Blazor WebAssembly app te converteren naar een equivalente .NET 8 Blazor Web App, waardoor alle nieuwe .NET 8-functies beschikbaar zijn.
Belangrijk
Deze sectie is gericht op de minimale wijzigingen die nodig zijn om een .NET 7 ASP.NET Core gehoste Blazor WebAssembly app te converteren naar een .NET 8 Blazor Web App. Als u alle nieuwe Blazor Web App conventies wilt aannemen, volgt u de richtlijnen in de sectie Alle Blazor Web App conventies aannemen .
Volg de richtlijnen in de eerste drie secties van dit artikel:
-
De .NET SDK-versie bijwerken in
global.json
- Het doelframework bijwerken
- Pakketverwijzingen bijwerken
Belangrijk
Werk aan de hand van de voorgaande richtlijnen de
.Client
,.Server
en.Shared
projecten van de oplossing bij.-
De .NET SDK-versie bijwerken in
Voeg in het
.Client
projectbestand (.csproj
) de volgende MSBuild-eigenschappen toe:<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
Verwijder ook in het
.Client
projectbestand deMicrosoft.AspNetCore.Components.WebAssembly.DevServer
pakketreferentie:- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
Verplaats de bestandsinhoud van het
.Client/wwwroot/index.html
bestand naar een nieuwApp
onderdeelbestand (App.razor
) dat is gemaakt in de hoofdmap van het.Server
project. Nadat u de inhoud van het bestand hebt verplaatst, verwijdert u hetindex.html
bestand.Wijzig de naam
App.razor
in het.Client
project inRoutes.razor
.Werk in
Routes.razor
de waarde van hetAppAssembly
-attribuut bij naartypeof(Program).Assembly
.Voeg in het
.Client
project een vermelding toe aan het_Imports.razor
bestand om shorthand rendermodi beschikbaar te maken voor de app:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Maak een kopie van het
.Client
projectbestand_Imports.razor
en voeg het toe aan het.Server
project.Breng de volgende wijzigingen aan in het
App.razor
bestand:Vervang de standaardtitel van de website (
<title>...</title>
) door een HeadOutlet onderdeel. Noteer de websitetitel voor later gebruik en verwijder de titeltags en titel:- <title>...</title>
Wanneer u de titel hebt verwijderd, plaatst u een HeadOutlet onderdeel dat de weergavemodus Interactive WebAssembly toewijst (vooraf renderen uitgeschakeld):
<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Wijzig de CSS-stijlbundel:
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet"> + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
Plaatsaanduidingen in de voorgaande code:
-
{CLIENT PROJECT ASSEMBLY NAME}
: Naam van clientprojectassembly. Voorbeeld:BlazorSample.Client
-
{SERVER PROJECT ASSEMBLY NAME}
: Assemblynaam van het serverproject. Voorbeeld:BlazorSample.Server
Zoek de volgende
<div>...</div>
HTML-markeringen:- <div id="app"> - ... - </div>
Vervang de voorgaande
<div>...</div>
HTML-markering door hetRoutes
onderdeel met behulp van de weergavemodus Interactive WebAssembly (vooraf renderen uitgeschakeld):<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Werk het
blazor.webassembly.js
script bij naarblazor.web.js
:- <script src="_framework/blazor.webassembly.js"></script> + <script src="_framework/blazor.web.js"></script>
-
Open het indelingsbestand van het
.Client
project (.Client/Shared/MainLayout.razor
) en voeg een PageTitle onderdeel toe met de standaardtitel van de website ({TITLE}
tijdelijke aanduiding):<PageTitle>{TITLE}</PageTitle>
Opmerking
Andere indelingsbestanden moeten ook een PageTitle onderdeel met de standaardwebsitetitel ontvangen.
Zie Hoofdinhoud beheren in ASP.NET Core-apps Blazorvoor meer informatie.
Verwijder de volgende regels uit
.Client/Program.cs
:- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");
.Server/Program.cs
bijwerken:Voeg Razor-onderdeel en interactieve WebAssembly-componentservices toe aan het project. Roep AddRazorComponents aan met een gekoppelde aanroep naar AddInteractiveWebAssemblyComponents. Aanroepen AddRazorComponents voegt standaard antivervalsingsservices (AddAntiforgery) toe.
builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();
Voeg Antiforgery Middleware toe aan de pijplijn voor aanvraagverwerking.
Plaats de volgende regel na de aanroep naar
app.UseHttpsRedirection
. De oproep naarapp.UseAntiforgery
moet worden geplaatst na oproepen naarapp.UseAuthentication
enapp.UseAuthorization
, indien die aanwezig zijn. Het is niet nodig om expliciet antivervalsingservices toe te voegen (builder.Services.AddAntiforgery
), omdat ze automatisch worden toegevoegd door AddRazorComponents, wat eerder is besproken.app.UseAntiforgery();
Verwijder de volgende regel:
- app.UseBlazorFrameworkFiles();
Verwijder de volgende regel:
- app.MapFallbackToFile("index.html");
Vervang de voorgaande regel door een aanroep van MapRazorComponents, waarbij het
App
-onderdeel wordt doorgegeven als het hoofdonderdeeltype, en voeg gekoppelde aanroepen van AddInteractiveWebAssemblyRenderMode en AddAdditionalAssemblies toe.app.MapRazorComponents<App>() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
In het voorgaande voorbeeld is de
{CLIENT APP NAMESPACE}
placeholder de namespace van het.Client
project (bijvoorbeeldHostedBlazorApp.Client
).Voer de oplossing uit vanuit het
.Server
project:Controleer voor Visual Studio of het
.Server
project is geselecteerd in Solution Explorer bij het uitvoeren van de app.Als u de .NET CLI gebruikt, voert u het project uit vanuit de map van het
.Server
project.
Configuratie van service- en eindpuntopties bijwerken
Met de release van Blazor Web Apps in .NET 8 wordt de configuratie van Blazor service- en eindpuntopties bijgewerkt met de introductie van een nieuwe API voor interactieve componentservices en de configuratie van onderdeeleindpunten.
Bijgewerkte configuratierichtlijnen worden weergegeven op de volgende locaties:
- De omgeving van de app instellen en lezen: bevat bijgewerkte richtlijnen, met name in de sectie getiteld De omgevingsclient in een Blazor Web Applezen.
- Opties voor circuithandlers aan de serverzijde: behandelt de configuratie van nieuwe BlazorcircuitSignalR - en hubopties.
- Onderdelen weergeven Razor vanuit JavaScript: behandelt dynamische onderdeelregistratie met RegisterForJavaScript.
-
Blazor aangepaste elementen: Blazor Web App registratie: behandelt de registratie van aangepaste elementen van de hoofdcomponent met
RegisterCustomElement
. - Voorvoegsel voor Blazor WebAssembly assets: Beheert de controle over de padtekenreeks die het voorvoegsel voor Blazor WebAssembly assets aangeeft.
- Geldigheidsduur van tijdelijke omleidings-URL's: Behandelt de controle over de levensduur van gegevensbescherming voor tijdelijke omleidings-URL's die worden verzonden door server-side rendering.
- Gedetailleerde fouten: behandelt het inschakelen van gedetailleerde fouten voor Razor rendering aan de serverzijde van het onderdeel.
- Prerenderingsconfiguratie: Prerendering is standaard ingeschakeld voor Blazor Web Apps. Volg deze koppeling voor hulp bij het uitschakelen van prerendering als u speciale omstandigheden hebt waarvoor een app prerendering moet uitschakelen.
- Opties voor formulierbinding: behandelt de configuratie van formulierbindingsopties.
Tijdelijke oplossing voor verwijderen Blazor Server met Yarp-routering
Als u eerder de richtlijnen inSchakelen ASP.NET Core-ondersteuning Blazor Server met Yarp in incrementele migratie hebt gevolgd voor het migreren van een Blazor Server app met Yarp naar .NET 6 of .NET 7, kunt u de tijdelijke stappen die u hebt uitgevoerd, omkeren wanneer u de richtlijnen van het artikel volgt. Routering en deep linking voor Blazor Server met Yarp werkt correct in .NET 8.
Migreer CascadingValue
componenten binnen indelingscomponenten
Trapsgewijze parameters geven geen gegevens door over de grenzen van de rendermodus en indelingen worden statisch weergegeven in andere interactieve apps. Apps die trapsgewijze parameters in interactief gerenderde onderdelen willen gebruiken, kunnen daarom niet de waarden vanuit een lay-out doorgeven.
De twee benaderingen voor migratie zijn:
- (Aanbevolen) Geef de status door als trapsgewijze waarde op hoofdniveau. Zie de richtlijnen voor trapsgewijze waarden op hoofdniveau en trapsgewijze waarden op hoofdniveau met meldingen voor meer informatie.
- Verpakt de router in het
Routes
onderdeel met hetCascadingValue
onderdeel en zorg ervoor dat hetRoutes
onderdeel interactief wordt weergegeven. Voor een voorbeeld, zie deCascadingValue
component.
Zie Trapsgewijze waarden/parameters en weergavemodusgrenzen voor meer informatie.
De MSBuild-eigenschap BlazorEnableCompression
migreren
Voor Blazor WebAssembly apps die compressie uitschakelen en zich richten op .NET 7 of eerder, maar zijn gebouwd met de .NET 8 SDK, is de BlazorEnableCompression
eigenschap MSBuild gewijzigd in CompressionEnabled
:
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
Wanneer u de .NET CLI-opdracht voor publiceren gebruikt, gebruikt u de nieuwe eigenschap:
dotnet publish -p:CompressionEnabled=false
Zie de volgende bronnen voor meer informatie:
- Wijziging in de compressievlag voor statische web-assets (dotnet/aankondigingen #283)
- Host en rol ASP.NET Core uitBlazor WebAssembly
Migreer het <CascadingAuthenticationState>
-onderdeel naar trapsgewijze authenticatiestatusservices
In .NET 7 of eerder wordt het CascadingAuthenticationState onderdeel verpakt rond een deel van de UI-structuur, bijvoorbeeld rond de Blazor router, om trapsgewijze verificatiestatus te bieden:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
In .NET 8, gebruik het CascadingAuthenticationState-onderdeel niet.
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Voeg in plaats daarvan trapsgewijze verificatiestatusservices toe aan de serviceverzameling door het AddCascadingAuthenticationState bestand aan te roepenProgram
:
builder.Services.AddCascadingAuthenticationState();
Zie de volgende bronnen voor meer informatie:
- artikel over ASP.NET kernverificatie Blazor en autorisatie
- ASP.NET Core Blazor verificatie en autorisatie
Nieuw artikel over problemen met HTTP-caching
We hebben een nieuw artikel toegevoegd waarin enkele veelvoorkomende http-cacheproblemen worden besproken die kunnen optreden bij het upgraden van Blazor apps in grote versies en het oplossen van problemen met HTTP-caching.
Zie Problemen met HTTP-caching voorkomen bij het upgraden van ASP.NET Core Blazor-appsvoor meer informatie.
Nieuw artikel over klassebibliotheken met statische server-side rendering (statische SSR)
We hebben een nieuw artikel toegevoegd waarin het auteurschap van componentenbibliotheken in klassebibliotheken van het type Razor (RCL's) met statische server-side rendering (statische SSR) wordt besproken.
Zie voor meer informatie ASP.NET Core Razor klassebibliotheken (RCL's) met statische server-side rendering (statische SSR).
Ontdekken van componenten uit extra assemblies
Wanneer u van een Blazor Server app naar een Blazor Web Appapp migreert, opent u de richtlijnen in ASP.NET Core-routering Blazor en -navigatie als de app routeerbare onderdelen van aanvullende assembly's gebruikt, zoals onderdelenklassebibliotheken.
Kenmerk [Parameter]
verwijderen wanneer de parameter wordt opgegeven van een queryreeks
Het kenmerk [Parameter]
is niet meer vereist bij het opgeven van een parameter uit de querytekenreeks:
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server autorisatie van scriptterugvalbeleid
In .NET 7 wordt het Blazor Server script (blazor.server.js
) geleverd door Static Files Middleware. Het plaatsen van de aanroep voor Static Files Middleware (UseStaticFiles) in de aanvraagverwerkingspijplijn voordat de aanroep naar Authorization Middleware (UseAuthorization) voldoende is in .NET 7-apps om het Blazor script aan anonieme gebruikers te leveren.
In .NET 8 wordt het Blazor Server script geleverd door een eigen eindpunt, met behulp van eindpuntroutering. Deze wijziging wordt geïntroduceerd door een fout opgelost: opties doorgeven aan UseStaticFiles-einden Blazor Server (dotnet/aspnetcore
#45897).
Overweeg een scenario met meerdere tenants waarbij:
- Zowel het standaard- als het terugvalbeleid worden identiek ingesteld.
- De tenant wordt opgelost met behulp van het eerste segment in het aanvraagpad (bijvoorbeeld
tld.com/tenant-name/...
). - Verzoeken aan tenant-eindpunten worden gevalideerd door een aanvullend authenticatiemechanisme, dat een extra identiteit toevoegt aan het verzoekprincipe.
- Het terugval-autorisatiebeleid heeft vereisten die claims verifiëren via de extra identiteit.
Aanvragen voor het Blazor scriptbestand (blazor.server.js
) worden verwerkt op /_framework/blazor.server.js
, die in het framework is vastgelegd. Aanvragen voor het bestand worden niet geverifieerd door het aanvullende verificatieschema voor huurders, maar worden nog steeds uitgedaagd door het terugvalbeleid, wat resulteert in een niet-geautoriseerd resultaat.
Dit probleem wordt geëvalueerd voor een nieuwe frameworkfunctie in MapRazorComponents die is verbroken met FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore
51836), dat momenteel gepland is voor de release van .NET 9 in november 2024. Tot die tijd kunt u dit probleem omzeilen met behulp van een van de volgende drie benaderingen:
Gebruik geen terugvalbeleid. Pas het
[Authorize]
kenmerk in het_Imports.razor
bestand toe om het toe te passen op alle onderdelen van de app. Gebruik voor niet-blazor-eindpunten expliciet[Authorize]
ofRequireAuthorization
.Toevoegen
[AllowAnonymous]
aan het/_framework/blazor.server.js
eindpunt in hetProgram
bestand:app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });
Registreer een aangepaste
AuthorizationHandler
die controleert of deHttpContext
het/_framework/blazor.server.js
bestand toestaat.
Dokwerker
Docker-installatiekopieën bijwerken
Werk voor apps die Docker gebruiken de Dockerfile-instructiesFROM
en -scripts bij. Gebruik een basisafbeelding die de .NET 8-runtime bevat. Houd rekening met het volgende docker pull
opdrachtverschil tussen ASP.NET Core in .NET 7 en .NET 8:
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Docker-poort bijwerken
De standaardpoort ASP.NET Core die is geconfigureerd in .NET-containerinstallatiekopieën, is bijgewerkt van poort 80 naar 8080.
De nieuwe ASPNETCORE_HTTP_PORTS
omgevingsvariabele is toegevoegd als een eenvoudiger alternatief voor ASPNETCORE_URLS
.
Voor meer informatie, zie:
- De standaardpoort ASP.NET Core is gewijzigd van 80 in 8080.
-
Alleen poorten opgeven met
ASPNETCORE_HTTP_PORTS
Brekende wijzigingen bekijken
Zie Belangrijke wijzigingen in .NET 8, inclusief ASP.NET Core - en Entity Framework Core-secties voor belangrijke wijzigingen van .NET 7 naar .NET 8.