Ereignisse
Nehmen Sie uns bei FabCon Vegas bei
31. März, 23 Uhr - 2. Apr., 23 Uhr
Das ultimative Microsoft Fabric-, Power BI-, SQL- und AI-communitygeführte Ereignis. 31. März bis 2. April 2025.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
In diesem Artikel wird erläutert, wie Sie ein vorhandenes ASP.NET Core 7.0-Projekt auf ASP.NET Core 8.0 aktualisieren.
Visual Studio 2022 mit der Workload ASP.NET und Webentwicklung
Wenn Sie eine global.json
-Datei für eine bestimmte .NET Core SDK-Version verwenden, aktualisieren Sie die version
-Eigenschaft auf die installierte .NET 8.0 SDK-Version. Beispiel:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
Aktualisieren Sie den Zielframeworkmoniker (Target Framework Moniker, TFM) der Projektdatei auf net8.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
Aktualisieren Sie in der Projektdatei das Version
-Attribut jedes Paketverweises vom Typ Microsoft.AspNetCore.*
, Microsoft.EntityFrameworkCore.*
, Microsoft.Extensions.*
und System.Net.Http.Json
auf 8.00 oder höher. Beispiel:
<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>
Die folgenden Migrationsszenarios werden behandelt:
CascadingValue
-Komponenten in LayoutkomponentenBlazorEnableCompression
<CascadingAuthenticationState>
-Komponente zu kaskadierenden Authentifizierungszustandsdiensten[Parameter]
-Attribut weg, wenn der Parameter über eine Abfragezeichenfolge bereitgestellt wird.Anleitungen zum Hinzufügen Blazor von Unterstützung zu einer ASP.NET Core-App finden Sie unter Integrieren ASP.NET Core-Komponenten Razor in MVC oder Razor Pages.
Es wird empfohlen, Blazor Web Apps in .NET 8 zu verwenden, aber Blazor Server wird unterstützt. Wenn Sie bei .NET 8 weiterhin Blazor Server verwenden möchten, befolgen Sie die Anweisungen in den ersten drei Abschnitten dieses Artikels:
global.json
Neue Blazor-Features, die für Blazor Web Apps eingeführt wurden, stehen nicht für Blazor Server-Apps zur Verfügung, die für die Ausführung unter .NET 8 aktualisiert wurden. Wenn Sie die neuen Blazor-Features für .NET 8 nutzen möchten, befolgen Sie die Anweisungen in einem der folgenden Abschnitte:
Um optional alle neuen Blazor Web App-Konventionen anzuwenden, wird der folgende Prozess empfohlen:
Neue .NET 8-Features werden unter Neuerungen in ASP.NET Core 8.0 behandelt. Wenn Sie eine App von .NET 6 oder einer früheren Version updaten, lesen Sie die Migrations- und Versionshinweise (Artikel zu Neuerungen) für die dazwischenliegenden Releases.
Blazor Server-Apps werden in .NET 8 ohne Codeänderungen unterstützt. Verwenden Sie die folgende Anleitung, um eine Blazor Server-App in eine entsprechende .NET 8-Blazor Web App zu konvertieren, die alle neuen .NET 8-Features verfügbar macht.
Wichtig
Dieser Abschnitt konzentriert sich auf die minimalen Änderungen, die zum Konvertieren einer Blazor Server-App mit .NET 7 in eine Blazor Web App mit .NET 8 erforderlich sind. Um alle neuen Blazor Web App-Konventionen anzuwenden, befolgen Sie die Anleitungen im Abschnitt Übernehmen aller Blazor Web App-Konventionen.
Befolgen Sie die Anleitungen in den ersten drei Abschnitten dieses Artikels:
Verschieben Sie den Inhalt der App
-Komponenten (App.razor
) in eine neue Routes
-Komponentendatei (Routes.razor
), die dem Stammordner des Projekts hinzugefügt wurde. Lassen Sie die leere App.razor
-Datei in der App im Stammordner des Projekts.
Fügen Sie der _Imports.razor
-Datei einen Eintrag hinzu, um kompakte Rendermodi für die App verfügbar zu machen:
@using static Microsoft.AspNetCore.Components.Web.RenderMode
Verschieben Sie den Inhalt der Seite _Host
(Pages/_Host.cshtml
) in die leere App.razor
-Datei. Nehmen Sie dann die folgenden Änderungen an der App
-Komponente vor.
Hinweis
Im folgenden Beispiel lautet der Namespace des Projekts BlazorServerApp
. Passen Sie den Namespace an Ihr Projekt an.
Entfernen Sie am Anfang der Datei folgende Zeilen:
- @page "/"
- @using Microsoft.AspNetCore.Components.Web
- @namespace BlazorServerApp.Pages
- @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Ersetzen Sie die vorhergehenden Zeilen durch eine Zeile, die eine IHostEnvironment-Instanz einfügt:
@inject IHostEnvironment Env
Entfernen Sie die Tilde (~
) aus dem href
-Teil des <base>
-Tags, und ersetzen Sie sie durch den Basispfad für Ihre App:
- <base href="~/" />
+ <base href="/" />
Entfernen Sie das Komponententag-Hilfsprogramm für die HeadOutlet-Komponente, und ersetzen Sie es durch die HeadOutlet-Komponente.
Entfernen Sie die folgende Zeile:
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
Ersetzen Sie die obige Zeile durch Folgendes:
<HeadOutlet @rendermode="InteractiveServer" />
Entfernen Sie das Komponententag-Hilfsprogramm für die App
-Komponente, und ersetzen Sie es durch die Routes
-Komponente.
Entfernen Sie die folgende Zeile:
- <component type="typeof(App)" render-mode="ServerPrerendered" />
Ersetzen Sie die obige Zeile durch Folgendes:
<Routes @rendermode="InteractiveServer" />
Hinweis
Bei der vorherigen Konfiguration wird davon ausgegangen, dass die Komponenten der App bereits interaktives Serverrendering anwenden. Weitere Informationen, einschließlich der Einführung von statischem serverseitigem Rendering, finden Sie unter ASP.NET Core-Blazor-Rendermodi.
Entfernen Sie die Umgebungstag-Hilfsprogramme für die Fehlerbenutzeroberfläche, und ersetzen Sie sie durch das folgende Razor-Markup.
Entfernen Sie die folgenden Zeilen:
- <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>
Ersetzen Sie die obige Zeile durch Folgendes:
@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>
}
Ändern Sie das Blazor-Skript von blazor.server.js
in blazor.web.js
:
- <script src="_framework/blazor.server.js"></script>
+ <script src="_framework/blazor.web.js"></script>
Lösche die Datei Pages/_Host.cshtml
.
Aktualisieren Sie Program.cs
:
Hinweis
Im folgenden Beispiel lautet der Namespace des Projekts BlazorServerApp
. Passen Sie den Namespace an Ihr Projekt an.
Fügen Sie oben in der Datei für den Namespace des Projekts eine using
-Anweisung hinzu:
using BlazorServerApp;
Ersetzen Sie AddServerSideBlazor durch AddRazorComponents und einen verketteten Aufruf von AddInteractiveServerComponents.
Entfernen Sie die folgende Zeile:
- builder.Services.AddServerSideBlazor();
Ersetzen Sie die vorangehende Zeile durch Razor-Komponenten- und interaktive Serverkomponentendienste. Das Aufrufen von AddRazorComponents fügt standardmäßig Dienste zur Fälschungssicherheit (AddAntiforgery) hinzu.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
Entfernen Sie die folgende Zeile:
- app.MapBlazorHub();
Ersetzen Sie die vorangehende Zeile durch einen Aufruf von MapRazorComponents, geben Sie die App
-Komponente als Stammkomponententyp an, und fügen Sie einen verketteten Aufruf an AddInteractiveServerRenderMode hinzu:
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
Entfernen Sie die folgende Zeile:
- app.MapFallbackToPage("/_Host");
Routing-Middleware entfernen:
- app.UseRouting();
Fügen Sie Antiforgery Middleware zur Anforderungsverarbeitungspipeline nach der Zeile hinzu, die HTTPS Redirection Middleware hinzufügt (app.UseHttpsRedirection
):
app.UseAntiforgery();
Der vorangehende Aufruf app.UseAntiforgery
muss nach anrufen, sofern vorhanden, an app.UseAuthentication
und app.UseAuthorization
. Es ist nicht erforderlich, antiforgery-Dienste explizit hinzuzufügen (builder.Services.AddAntiforgery
), da sie automatisch hinzugefügt werden, von AddRazorComponentsdem zuvor behandelt wurde.
Wenn das Vorabrendering für die Blazor Server-App deaktiviert wurde, können Sie das Vorabrendering auch für die aktualisierte App deaktivieren. Ändern Sie in der App
-Komponente den Wert, der den @rendermode
Razor-Anweisungsattributen für die HeadOutlet- und Routes
- Komponenten zugewiesen ist.
Ändern Sie den Wert des @rendermode
Direktiv-Attributs für die HeadOutlet und Routes
die Komponenten, um die Voreinstellung zu deaktivieren:
- @rendermode="InteractiveServer"
+ @rendermode="new InteractiveServerRenderMode(prerender: false)"
Weitere Informationen finden Sie unter ASP.NET Core Blazor-Rendermodi.
Befolgen Sie die Anleitungen in den ersten drei Abschnitten dieses Artikels:
global.json
Für Apps, die lazy Assembly loading übernehmen, ändern Sie die Dateierweiterung von .dll
zu .wasm
in der Implementierung der App, um die Akzeptanz der Blazor WebAssembly-Einführung von Webcil Assembly Packaging widerzuspiegeln.
Vor der Veröffentlichung von .NET 8 wurden in der Anleitung zum Deployment-Layout für ASP.NET Core gehostete Blazor WebAssembly-Apps Umgebungen angesprochen, die Clients am Herunterladen und Ausführen von DLLs mit einem mehrteiligen Bündelungsansatz hindern. In .NET 8 oder höher verwendet Blazor das Webcil-Dateiformat, um dieses Problem zu beheben. Multipart-Bündelung mithilfe des experimentellen NuGet-Pakets, das im Artikel WebAssembly-Bereitstellungslayout beschrieben wird, wird für Blazor-Apps in .NET 8 oder höher nicht unterstützt. Wenn Sie das mehrteilige Paket in .NET 8 oder höheren Apps weiterhin verwenden möchten, können Sie die Anleitungen im Artikel verwenden, um Ihr eigenes mehrteiliges NuGet-Bündelungspaket zu erstellen, das aber von Microsoft nicht unterstützt wird.
Blazor WebAssembly-Apps werden in .NET 8 ohne Codeänderungen unterstützt. Verwenden Sie die folgende Anleitung, um eine in ASP.NET Core gehostete Blazor WebAssembly-App in eine entsprechende Blazor Web App-Web-App mit .NET 8 zu konvertieren, die alle neuen .NET 8-Features verfügbar macht.
Wichtig
Dieser Abschnitt konzentriert sich auf die minimalen Änderungen, die zum Konvertieren einer in ASP.NET Core gehosteten Blazor WebAssembly-App mit .NET 7 in eine Blazor Web App mit .NET 8 erforderlich sind. Um alle neuen Blazor Web App-Konventionen anzuwenden, befolgen Sie die Anleitungen im Abschnitt Übernehmen aller Blazor Web App-Konventionen.
Befolgen Sie die Anleitungen in den ersten drei Abschnitten dieses Artikels:
global.json
Wichtig
Aktualisieren Sie mithilfe der obigen Anleitungen die Projekte .Client
, .Server
und .Shared
in der Projektmappe.
Fügen Sie in der .Client
-Projektdatei (.csproj
) die folgenden MSBuild-Eigenschaften hinzu:
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
Entfernen Sie auch in der .Client
-Projektdatei den Microsoft.AspNetCore.Components.WebAssembly.DevServer
-Paketverweis:
- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
Verschieben Sie den Dateiinhalt aus der .Client/wwwroot/index.html
-Datei in eine neue App
-Komponentendatei (App.razor
), die im Stammverzeichnis des .Server
-Projekts erstellt wurde. Nachdem Sie den Inhalt der Datei verschoben haben, löschen Sie die index.html
-Datei.
Benennen Sie App.razor
im .Client
-Projekt in Routes.razor
um.
Ändern Sie in Routes.razor
den Wert des Attributs AppAssembly
in typeof(Program).Assembly
.
Fügen Sie der _Imports.razor
-Datei im .Client
-Projekt einen Eintrag hinzu, um kompakte Rendermodi für die App verfügbar zu machen:
@using static Microsoft.AspNetCore.Components.Web.RenderMode
Erstellen Sie eine Kopie der _Imports.razor
-Datei des .Client
-Projekts, und fügen Sie sie dem .Server
-Projekt hinzu.
Nehmen Sie an der App.razor
-Datei die folgenden Änderungen vor:
Ersetzen Sie den Standardtitel der Website (<title>...</title>
) durch eine HeadOutlet-Komponente. Notieren Sie sich den Websitetitel für später, und entfernen Sie die Titeltags sowie den Titel:
- <title>...</title>
Wenn Sie den Titel entfernt haben, platzieren Sie eine HeadOutlet-Komponente, die den interaktiven WebAssembly-Rendermodus zuweist (Prerendering deaktiviert):
<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Ändern Sie das CSS-Stilpaket:
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
+ <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
Platzhalter im vorherigen Code:
{CLIENT PROJECT ASSEMBLY NAME}
: Name der Clientprojektassembly. Beispiel: BlazorSample.Client
{SERVER PROJECT ASSEMBLY NAME}
: Name der Serverprojektassembly. Beispiel: BlazorSample.Server
Suchen Sie das folgende <div>...</div>
-HTML-Markup:
- <div id="app">
- ...
- </div>
Ersetzen Sie das vorausgehende <div>...</div>
-HTML-Markup durch die Routes
-Komponente. Dabei sollte der interaktive WebAssembly-Rendermodus verwendet werden (Vorabrendering ist deaktiviert):
<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Aktualisieren Sie das Skript blazor.webassembly.js
auf blazor.web.js
:
- <script src="_framework/blazor.webassembly.js"></script>
+ <script src="_framework/blazor.web.js"></script>
Öffnen Sie die Layoutdatei des .Client
-Projekts (.Client/Shared/MainLayout.razor
), und fügen Sie eine PageTitle-Komponente mit dem Standardtitel der Website hinzu ({TITLE}
-Platzhalter):
<PageTitle>{TITLE}</PageTitle>
Hinweis
Andere Layoutdateien sollten auch eine PageTitle-Komponente mit dem Standardtitel der Website erhalten.
Weitere Informationen finden Sie unter Steuern des Inhalts von „head“ in Blazor-Apps in ASP.NET Core.
Entfernen Sie die folgenden Zeilen aus .Client/Program.cs
:
- builder.RootComponents.Add<App>("#app");
- builder.RootComponents.Add<HeadOutlet>("head::after");
Aktualisieren Sie .Server/Program.cs
:
Fügen Sie dem Projekt die Razor-Komponente und interaktive WebAssembly-Komponentendienste hinzu. Rufen Sie AddRazorComponents mit einem verketteten Aufruf an AddInteractiveWebAssemblyComponents auf. Das Aufrufen von AddRazorComponents fügt standardmäßig Dienste zur Fälschungssicherheit (AddAntiforgery) hinzu.
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents();
Fügen Sie Antiforgery-Middleware zur Anforderungsverarbeitungspipeline hinzu.
Platzieren Sie die folgende Zeile nach dem Anruf.app.UseHttpsRedirection
Der Anruf muss app.UseAntiforgery
nach anrufen, sofern vorhanden, an app.UseAuthentication
und app.UseAuthorization
. Es ist nicht erforderlich, antiforgery-Dienste explizit hinzuzufügen (builder.Services.AddAntiforgery
), da sie automatisch hinzugefügt werden, von AddRazorComponentsdem zuvor behandelt wurde.
app.UseAntiforgery();
Entfernen Sie die folgende Zeile:
- app.UseBlazorFrameworkFiles();
Entfernen Sie die folgende Zeile:
- app.MapFallbackToFile("index.html");
Ersetzen Sie die vorangehende Zeile durch einen Aufruf an MapRazorComponents, geben Sie die App
-Komponente als Stammkomponententyp an und fügen Sie verkettete Aufrufe an AddInteractiveWebAssemblyRenderMode und AddAdditionalAssemblies hinzu:
app.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
Im vorherigen Beispiel steht der {CLIENT APP NAMESPACE}
-Platzhalter für den Namespace des .Client
-Projekts (z. B. HostedBlazorApp.Client
).
Führen Sie die Projektmappe über das .Server
-Projekt aus:
Vergewissern Sie sich bei Visual Studio, dass das .Server
-Projekt im Projektmappen-Explorer ausgewählt ist, wenn die App ausgeführt wird.
Wenn Sie die .NET-CLI verwenden, führen Sie das Projekt aus dem Ordner des .Server
-Projekts aus.
Mit der Veröffentlichung von Blazor Web Apps in .NET 8 wird die Konfiguration von Dienst- und Endpunktoptionen für Blazor aufgrund der Einführung der neuen API für die Konfiguration von interaktiven Komponentendiensten und -endpunkten aktualisiert.
Aktualisierte Konfigurationsanleitungen finden Sie in den folgenden Artikeln:
RegisterCustomElement
behandelt.Wenn Sie zuvor die Anleitung unter Aktivieren der ASP.NET Core Blazor Server-Unterstützung mit Yarp bei der inkrementellen Migration zum Migrieren einer Blazor Server-App mit Yarp zu .NET 6 oder .NET 7 befolgt haben, können Sie die Schritte zur Problemumgehung rückgängig machen, die in diesem Artikel genannt werden. Routing und Deep Linking für Blazor Server mit Yarp funktionieren in .NET 8 ordnungsgemäß.
Kaskadierende Parameter geben keine Daten über Grenzen des Rendermodus hinweg weiter, und Layouts werden in ansonsten interaktiven Anwendungen statisch gerendert. Daher können Apps, die kaskadierende Parameter in interaktiv gerenderten Komponenten verwenden möchten, die Werte nicht aus einem Layout kaskadieren.
Die beiden Ansätze für die Migration sind:
Routes
-Komponente mit der CascadingValue
-Komponente, und sorgen Sie dafür, dass die Routes
-Komponente interaktiv gerendert ist. Ein Beispiel finden Sie unter CascadingValue
-Komponente.Weitere Informationen finden Sie unter Kaskadierende Werte/Parameter und Grenzen des Rendermodus.
Für Blazor WebAssembly-Apps, die die Komprimierung und das Ziel .NET 7 oder früher deaktivieren, aber mit dem .NET 8 SDK erstellt werden, hat sich die MSBuild-Eigenschaft BlazorEnableCompression
in CompressionEnabled
geändert:
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
Verwenden Sie bei Nutzung des .NET CLI-Veröffentlichungsbefehls die neue Eigenschaft:
dotnet publish -p:CompressionEnabled=false
Weitere Informationen finden Sie in den folgenden Ressourcen:
<CascadingAuthenticationState>
-Komponente zu kaskadierenden AuthentifizierungszustandsdienstenIn .NET 7 oder früheren Versionen wird die CascadingAuthenticationState-Komponente um einen Teil der UI-Struktur umschlossen, z. B. um den Blazor-Router herum, um den Authentifizierungszustand der Kaskadierung bereitzustellen:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
Verwenden Sie in .NET 8 nicht die CascadingAuthenticationState-Komponente:
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Fügen Sie stattdessen Authentifizierungszustandsdienste für die Kaskadierung zur Dienstsammlung hinzu, indem Sie AddCascadingAuthenticationState in der Program
-Datei aufrufen:
builder.Services.AddCascadingAuthenticationState();
Weitere Informationen finden Sie in den folgenden Ressourcen:
Wir haben einen neuen Artikel hinzugefügt, in dem einige der häufig auftretenden Probleme beim Zwischenspeichern von HTTP erläutert werden, die beim Upgrade von Blazor-Apps auf Hauptversionen auftreten können und wie HTTP-Zwischenspeicherungsprobleme behoben werden.
Weitere Informationen finden Sie unter Vermeiden von HTTP-Zwischenspeicherungsproblemen beim Upgrade von ASP.NET Core-Blazor-Apps.
Wir haben einen neuen Artikel hinzugefügt, in dem die Erstellung von Komponentenbibliotheken in Razor-Klassenbibliotheken (RCLs) mit statischem serverseitigem Rendering (statisches SSR) erläutert wird.
Weitere Informationen finden Sie unter ASP.NET Core-Razor-Klassenbibliotheken (RCLs) mit statischem serverseitigem Rendering (statisches SSR).
Greifen Sie bei der Migration von einer Blazor Server-App zu einer Blazor Web App auf die Anleitung in Routing und Navigation in SP.NET Core-Blazor zu, wenn die App routingfähige Komponenten aus zusätzlichen Assemblys, wie z. B. Komponenten-Klassenbibliotheken, verwendet.
[Parameter]
-Attribut weg, wenn der Parameter über eine Abfragezeichenfolge bereitgestellt wird.Das [Parameter]
-Attribut ist nicht mehr erforderlich, wenn ein Parameter über die Abfragezeichenfolge bereitgestellt wird:
- [Parameter]
[SupplyParameterFromQuery]
In .NET 7 wird das Blazor Server-Skript (blazor.server.js
) von Static Files Middleware bereitgestellt. Das Platzieren des Aufrufs für Static Files Middleware (UseStaticFiles) in der Anforderungsverarbeitungspipeline vor dem Aufruf von Authorization Middleware (UseAuthorization) ist in .NET 7-Anwendungen ausreichend, um das Blazor-Skript für anonyme Benutzer bereitzustellen.
In .NET 8 wird das Blazor Server-Skript mithilfe des Endpunktroutings von einem eigenen Endpunkt bereitgestellt. Diese Änderung wurde mit Fixed bug - Passing options to UseStaticFiles breaks Blazor Server (dotnet/aspnetcore
#45897) eingeführt.
Betrachten Sie ein Szenario mit mehreren Mandanten, in dem:
tld.com/tenant-name/...
).Anforderungen für die Blazor-Skriptdatei (blazor.server.js
) werden mit /_framework/blazor.server.js
bereitgestellt, die im Framework hartcodiert ist. Anforderungen für die Datei werden nicht vom zusätzlichen Authentifizierungsschema für Mandanten authentifiziert, werden jedoch weiterhin von der Fallbackrichtlinie herausgefordert, was dazu führt, dass ein nicht autorisiertes Ergebnis zurückgegeben wird.
Dieses Problem wird derzeit für eine neue Framework-Funktion in MapRazorComponents bricht mit FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore
51836) evaluiert, die derzeit für die Veröffentlichung von .NET 9 im November 2024 geplant ist. Bis dahin können Sie dieses Problem mit einem der folgenden drei Ansätze umgehen:
Verwenden Sie keine Fallbackrichtlinie. Wenden Sie das Attribut [Authorize]
in der Datei _Imports.razor
an, um es auf alle Komponenten der App anzuwenden. Verwenden Sie für Nicht-blazor-Endpunkte explizit [Authorize]
oder RequireAuthorization
.
Fügen Sie [AllowAnonymous]
zum Endpunkt /_framework/blazor.server.js
in der Datei Program
hinzu:
app.MapBlazorHub().Add(endpointBuilder =>
{
if (endpointBuilder is
RouteEndpointBuilder
{
RoutePattern: { RawText: "/_framework/blazor.server.js" }
})
{
endpointBuilder.Metadata.Add(new AllowAnonymousAttribute());
}
});
Registrieren Sie eine benutzerdefinierte AuthorizationHandler
, die die HttpContext
überprüft, um die Datei /_framework/blazor.server.js
zuzulassen.
Aktualisieren Sie für Apps, die Docker verwenden, die Dockerfile-FROM
-Anweisungen und Skripts. Verwenden Sie ein Basisimage, das die ASP.NET Core 8.0-Runtime enthält. Beachten Sie den folgenden Unterschied beim Befehl docker pull
zwischen ASP.NET Core 7.0 und 8.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Der in .NET-Containerimages konfigurierte Standardport für ASP.NET Core wurde von Port 80 in 8080 geändert.
Die neue ASPNETCORE_HTTP_PORTS
Umgebungsvariable wurde als einfachere Alternative zu ASPNETCORE_URLS
hinzugefügt.
Weitere Informationen finden Sie unter:
Informationen zu Breaking Changes von .NET Core 7.0 zu 8.0 finden Sie unter Grundlegende Änderungen in .NET 8, die ASP.NET Core und Entity Framework Core-Abschnitte enthält.
Feedback zu ASP.NET Core
ASP.NET Core ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
Nehmen Sie uns bei FabCon Vegas bei
31. März, 23 Uhr - 2. Apr., 23 Uhr
Das ultimative Microsoft Fabric-, Power BI-, SQL- und AI-communitygeführte Ereignis. 31. März bis 2. April 2025.
Jetzt registrieren