Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core na platformie .NET 7 do platformy .NET 8.
Wymagania wstępne
Program Visual Studio 2022 z pakietem roboczym ASP.NET i tworzeniem aplikacji internetowych .
Aktualizowanie wersji zestawu .NET SDK w programie global.json
Jeśli używasz global.json
pliku do wycelowania w określoną wersję pakietu .NET Core SDK, zaktualizuj właściwość version
na wersję zainstalowanego pakietu .NET 8 SDK. Na przykład:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
Aktualizowanie platformy docelowej
Zaktualizuj plik projektu Target Framework Moniker (TFM) na net8.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
Aktualizowanie odwołań do pakietów
W pliku projektu zaktualizuj atrybut Microsoft.AspNetCore.*
dla każdego odniesienia do pakietu Microsoft.EntityFrameworkCore.*
, Microsoft.Extensions.*
, System.Net.Http.Json
i Version
do wersji 8.0.0 lub nowszej. Na przykład:
<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
Omówiono następujące scenariusze migracji:
- Blazor Server Aktualizowanie aplikacji
- Przyjęcie wszystkich Blazor Web App konwencji
- Konwertowanie Blazor Server aplikacji na Blazor Web App
- Blazor WebAssembly Aktualizowanie aplikacji
- Konwertowanie hostowanej Blazor WebAssembly aplikacji na Blazor Web App
- Aktualizowanie konfiguracji opcji usługi i punktu końcowego
- Usuwanie Blazor Server przy użyciu obejścia routingu yarp
-
Migrowanie
CascadingValue
składników w składnikach układu -
BlazorEnableCompression
Migrowanie właściwości MSBuild -
<CascadingAuthenticationState>
Migrowanie składnika do kaskadowych usług stanu uwierzytelniania - Nowy artykuł: Problemy z buforowaniem HTTP podczas migracji
- Nowy artykuł: Nowy artykuł dotyczący bibliotek klas ze statycznym renderowaniem po stronie serwera (statyczne SSR)
- Odnajdywanie składników z dodatkowych zestawów
-
Porzucanie
[Parameter]
atrybutu, gdy parametr jest dostarczany z ciągu zapytania - Blazor Server autoryzacja polityki rezerwowej skryptu
Aby uzyskać wskazówki dotyczące dodawania Blazor obsługi do aplikacji ASP.NET Core, zobacz Integrowanie składników ASP.NET Core Razor z MVC lub Razor Pages.
Blazor Server Aktualizowanie aplikacji
Zalecamy używanie biblioteki Blazor Web Apps na platformie .NET 8, ale Blazor Server jest obsługiwane. Aby kontynuować korzystanie z platformy Blazor Server .NET 8, postępuj zgodnie ze wskazówkami w pierwszych trzech sekcjach tego artykułu:
-
Aktualizowanie wersji zestawu .NET SDK w programie
global.json
- Aktualizowanie platformy docelowej
- Aktualizowanie odwołań do pakietu
Nowe Blazor funkcje wprowadzone dla programu Blazor Web Appnie są dostępne dla aplikacji zaktualizowanej Blazor Server do działania na platformie .NET 8. Jeśli chcesz wdrożyć nowe funkcje platformy .NET 8 Blazor , postępuj zgodnie ze wskazówkami w jednej z następujących sekcji:
- Przyjęcie wszystkich Blazor Web App konwencji
- Konwertowanie Blazor Server aplikacji na Blazor Web App
Przyjęcie wszystkich Blazor Web App konwencji
Aby opcjonalnie przyjąć wszystkie nowe Blazor Web App konwencje, zalecamy następujący proces:
- Utwórz nową aplikację na podstawie szablonu Blazor Web App projektu. Aby uzyskać więcej informacji, zobacz Tooling for ASP.NET Core Blazor.
- Przenieś składniki i kod aplikacji do nowego Blazor Web Apppliku , wprowadzając modyfikacje w celu wdrożenia nowych funkcji.
- Zaktualizuj układ i style elementu Blazor Web App.
Nowe funkcje platformy .NET 8 zostały omówione w temacie Co nowego w programie ASP.NET Core na platformie .NET 8. Podczas aktualizowania aplikacji z platformy .NET 6 lub starszej zapoznaj się z notatkami o migracji i wydaniu (artykuły Co nowego) dotyczącymi pośrednich wersji.
Konwertowanie Blazor Server aplikacji na Blazor Web App
Blazor Server aplikacje są obsługiwane na platformie .NET 8 bez żadnych zmian w kodzie. Skorzystaj z poniższych wskazówek, aby przekonwertować aplikację na równoważną platformę Blazor Server .NET 8 Blazor Web App, która udostępnia wszystkie nowe funkcje platformy .NET 8 .
Ważne
Ta sekcja koncentruje się na minimalnych zmianach wymaganych do przekonwertowania aplikacji platformy .NET 7 Blazor Server na platformę .NET 8 Blazor Web App. Aby przyjąć wszystkie nowe Blazor Web App konwencje, postępuj zgodnie ze wskazówkami w Blazor Web AppWdrażanie wszystkich konwencji).
Postępuj zgodnie ze wskazówkami w pierwszych trzech sekcjach tego artykułu:
Przenieś zawartość
App
składnika () do nowegoApp.razor
pliku składnika (Routes
Routes.razor
) dodanego do folderu głównego projektu. Pozostaw pustyApp.razor
plik w aplikacji w folderze głównym projektu.Dodaj wpis do pliku,
_Imports.razor
aby udostępnić skrócone tryby renderowania aplikacji:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Przenieś zawartość na
_Host
stronie (Pages/_Host.cshtml
) do pustegoApp.razor
pliku. Przejdź do wprowadzenia następujących zmian w składnikuApp
.Uwaga
W poniższym przykładzie przestrzeń nazw projektu to
BlazorServerApp
. Dostosuj przestrzeń nazw tak, aby odpowiadała projektowi.Usuń następujące wiersze w górnej części pliku:
- @page "/" - @using Microsoft.AspNetCore.Components.Web - @namespace BlazorServerApp.Pages - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Zastąp powyższe wiersze wierszem, który wprowadza IHostEnvironment wystąpienie:
@inject IHostEnvironment Env
Usuń tyldę (
~
) zhref
tagu<base>
i zastąp ciąg ścieżką podstawową aplikacji:- <base href="~/" /> + <base href="/" />
Usuń pomocnik tagu składnika dla HeadOutlet składnika i zastąp go składnikiem HeadOutlet .
Usuń następujący wiersz:
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
Zastąp poprzedni wiersz następującym kodem:
<HeadOutlet @rendermode="InteractiveServer" />
Usuń pomocnik tagu składnika dla
App
składnika i zastąp go składnikiemRoutes
.Usuń następujący wiersz:
- <component type="typeof(App)" render-mode="ServerPrerendered" />
Zastąp poprzedni wiersz następującym kodem:
<Routes @rendermode="InteractiveServer" />
Uwaga
W poprzedniej konfiguracji przyjęto założenie, że składniki aplikacji przyjmują renderowanie interakcyjnego serwera. Aby uzyskać więcej informacji, w tym sposób wdrażania statycznego renderowania po stronie serwera (SSR), zobacz Blazor renderowania Podstawowe.
Usuń pomocników tagów środowiska dla interfejsu użytkownika błędu i zastąp je następującym Razor znacznikiem.
Usuń następujące wiersze:
- <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>
Zastąp poprzednie wiersze następującymi:
@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> }
Blazor Zmień skrypt z
blazor.server.js
nablazor.web.js
:- <script src="_framework/blazor.server.js"></script> + <script src="_framework/blazor.web.js"></script>
Pages/_Host.cshtml
Usuń plik.Aktualizacja
Program.cs
:Uwaga
W poniższym przykładzie przestrzeń nazw projektu to
BlazorServerApp
. Dostosuj przestrzeń nazw tak, aby odpowiadała projektowi.Dodaj instrukcję
using
na początku pliku dla przestrzeni nazw projektu:using BlazorServerApp;
Zastąp ciągiem AddServerSideBlazor i AddRazorComponents wywołaniem łańcuchowym do AddInteractiveServerComponentsmetody .
Usuń następujący wiersz:
- builder.Services.AddServerSideBlazor();
Zastąp poprzedni wiersz składnikami i interakcyjnymi usługami Razor składników serwera. Wywołanie AddRazorComponents domyślnie dodaje usługi ochrony przed fałszerzami (AddAntiforgery).
builder.Services.AddRazorComponents() .AddInteractiveServerComponents();
Usuń następujący wiersz:
- app.MapBlazorHub();
Zastąp poprzedni wiersz wywołaniem MapRazorComponentsmetody , podając
App
składnik jako typ składnika głównego, a następnie dodaj wywołanie łańcuchowe do AddInteractiveServerRenderModeelementu :app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();
Usuń następujący wiersz:
- app.MapFallbackToPage("/_Host");
Usuń oprogramowanie pośredniczące routingu:
- app.UseRouting();
Dodaj Oprogramowanie Pośredniczące Antiforgery do potoku przetwarzania żądań po linii, która dodaje Oprogramowanie Pośredniczące Przekierowania HTTPS (
app.UseHttpsRedirection
):app.UseAntiforgery();
Poprzednie wywołanie
app.UseAntiforgery
musi zostać umieszczone po wywołaniach, jeśli istnieje, doapp.UseAuthentication
iapp.UseAuthorization
. Nie trzeba jawnie dodawać usług ochrony przed fałszerzami (builder.Services.AddAntiforgery
), ponieważ są one dodawane automatycznie przez AddRazorComponentsusługę , która została omówiona wcześniej.Blazor Server Jeśli aplikacja została skonfigurowana do wyłączania prerenderingu, możesz nadal wyłączyć wstępne przetwarzanie dla zaktualizowanej aplikacji. W składniku
App
zmień wartość przypisaną@rendermode
Razordo atrybutów dyrektywy dla HeadOutlet składników iRoutes
.Zmień wartość atrybutu
@rendermode
dyrektywy zarówno HeadOutlet dla składników, jak iRoutes
, aby wyłączyć prerendering:- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"
Aby uzyskać więcej informacji, zobacz Blazor renderowania ASP.NET Core.
Blazor WebAssembly Aktualizowanie aplikacji
Postępuj zgodnie ze wskazówkami w pierwszych trzech sekcjach tego artykułu:
-
Aktualizowanie wersji zestawu .NET SDK w programie
global.json
- Aktualizowanie platformy docelowej
- Aktualizowanie odwołań do pakietu
W przypadku aplikacji, które przyjmują leniwe ładowanie zestawów, zmień rozszerzenie pliku z .dll
na .wasm
w implementacji aplikacji, aby odzwierciedlić Blazor WebAssemblywdrożenie pakietu zestawu Webcil.
Przed wydaniem platformy .NET 8 wskazówki dotyczące Blazor WebAssembly hostowanych ASP.NET Core dotyczą środowisk, które blokują klientom pobieranie i wykonywanie bibliotek DLL przy użyciu wieloczęściowego podejścia do tworzenia pakietów. W programie .NET 8 lub nowszym Blazor format pliku Webcil jest używany do rozwiązania tego problemu. Tworzenie pakietów wielopartowych przy użyciu eksperymentalnego pakietu NuGet opisanego w artykule dotyczącym układu wdrożenia zestawu WebAssembly nie jest obsługiwane w przypadku Blazor aplikacji na platformie .NET 8 lub nowszej. Jeśli chcesz nadal korzystać z pakietu pakietu wieloczęściowego w aplikacjach platformy .NET 8 lub nowszych, możesz użyć wskazówek zawartych w artykule, aby utworzyć własny pakiet NuGet z wieloma częściami, ale nie będzie obsługiwany przez firmę Microsoft.
Konwertowanie hostowanej Blazor WebAssembly aplikacji na Blazor Web App
Blazor WebAssembly aplikacje są obsługiwane na platformie .NET 8 bez żadnych zmian w kodzie. Skorzystaj z poniższych wskazówek, aby przekonwertować aplikację hostowaną Blazor WebAssembly ASP.NET Core na równoważną platformę .NET 8 Blazor Web App, która udostępnia wszystkie nowe funkcje platformy .NET 8 .
Ważne
Ta sekcja koncentruje się na minimalnych zmianach wymaganych do przekonwertowania aplikacji hostowanej Blazor WebAssembly na platformie .NET 7 ASP.NET Core na platformę .NET 8 Blazor Web App. Aby przyjąć wszystkie nowe Blazor Web App konwencje, postępuj zgodnie ze wskazówkami w Blazor Web AppWdrażanie wszystkich konwencji).
Postępuj zgodnie ze wskazówkami w pierwszych trzech sekcjach tego artykułu:
-
Aktualizowanie wersji zestawu .NET SDK w programie
global.json
- Aktualizowanie platformy docelowej
- Aktualizowanie odwołań do pakietu
Ważne
Korzystając z powyższych wskazówek, zaktualizuj
.Client
projekty ,.Server
i.Shared
rozwiązania.-
Aktualizowanie wersji zestawu .NET SDK w programie
.Client
W pliku projektu (.csproj
) dodaj następujące właściwości programu MSBuild:<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
Ponadto w
.Client
pliku projektu usuń odwołanie doMicrosoft.AspNetCore.Components.WebAssembly.DevServer
pakietu:- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
Przenieś zawartość pliku z
.Client/wwwroot/index.html
pliku do nowegoApp
pliku składnika (App.razor
) utworzonego.Server
w katalogu głównym projektu. Po przeniesieniu zawartości pliku usuńindex.html
plik.Zmień nazwę
App.razor
w projekcie na.Client
Routes.razor
.W
Routes.razor
pliku zaktualizuj wartość atrybutuAppAssembly
natypeof(Program).Assembly
.W projekcie
.Client
dodaj wpis do_Imports.razor
pliku, aby udostępnić skrócone tryby renderowania aplikacji:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Utwórz kopię
.Client
pliku projektu_Imports.razor
i dodaj go do.Server
projektu.Wprowadź następujące zmiany w
App.razor
pliku:Zastąp domyślny tytuł witryny internetowej (
<title>...</title>
) składnikiem HeadOutlet . Zanotuj tytuł witryny internetowej do późniejszego użycia i usuń tagi tytułu i tytuł:- <title>...</title>
W przypadku usunięcia tytułu umieść HeadOutlet składnik przypisujący tryb renderowania Interactive WebAssembly (wstępnie wyłączone):
<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
Zmień pakiet stylów CSS:
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet"> + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
Symbole zastępcze w poprzednim kodzie:
-
{CLIENT PROJECT ASSEMBLY NAME}
: Nazwa zestawu projektu klienta. Przykład:BlazorSample.Client
-
{SERVER PROJECT ASSEMBLY NAME}
: Nazwa zestawu projektu serwera. Przykład:BlazorSample.Server
Znajdź następujące
<div>...</div>
znaczniki HTML:- <div id="app"> - ... - </div>
Zastąp powyższy
<div>...</div>
znacznik HTML składnikiemRoutes
przy użyciu trybu renderowania Interactive WebAssembly (wstępnie wyłączone):<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
blazor.webassembly.js
Zaktualizuj skrypt nablazor.web.js
:- <script src="_framework/blazor.webassembly.js"></script> + <script src="_framework/blazor.web.js"></script>
-
.Client
Otwórz plik układu projektu (.Client/Shared/MainLayout.razor
) i dodaj PageTitle składnik z domyślnym tytułem witryny internetowej ({TITLE}
symbol zastępczy):<PageTitle>{TITLE}</PageTitle>
Uwaga
Inne pliki układu powinny również otrzymać PageTitle składnik z domyślnym tytułem witryny sieci Web.
Aby uzyskać więcej informacji, zobacz Blazor platformy ASP.NET Core).
Usuń następujące wiersze z
.Client/Program.cs
:- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");
Aktualizacja
.Server/Program.cs
:Dodawanie Razor składników i interakcyjnych usług składników zestawu WebAssembly do projektu. Wywołaj metodę AddRazorComponents za pomocą wywołania łańcuchowego do AddInteractiveWebAssemblyComponentsmetody . Wywołanie AddRazorComponents domyślnie dodaje usługi ochrony przed fałszerzami (AddAntiforgery).
builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();
Dodaj Antiforgery Middleware do potoku przetwarzania żądań.
Umieść następujący wiersz po wywołaniu metody
app.UseHttpsRedirection
. Wywołanieapp.UseAntiforgery
musi zostać umieszczone po wywołaniach, jeśli istnieją, doapp.UseAuthentication
iapp.UseAuthorization
. Nie trzeba jawnie dodawać usług ochrony przed fałszerzami (builder.Services.AddAntiforgery
), ponieważ są one dodawane automatycznie przez AddRazorComponentsusługę , która została omówiona wcześniej.app.UseAntiforgery();
Usuń następujący wiersz:
- app.UseBlazorFrameworkFiles();
Usuń następujący wiersz:
- app.MapFallbackToFile("index.html");
Zastąp poprzedni wiersz wywołaniem MapRazorComponentsmetody , podając
App
składnik jako typ składnika głównego, a następnie dodaj wywołania łańcuchowe do AddInteractiveWebAssemblyRenderMode i AddAdditionalAssemblies:app.MapRazorComponents<App>() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
W poprzednim przykładzie
{CLIENT APP NAMESPACE}
symbol zastępczy jest przestrzenią nazw.Client
projektu (na przykładHostedBlazorApp.Client
).Uruchom rozwiązanie z
.Server
projektu:W przypadku programu Visual Studio upewnij się, że
.Server
projekt został wybrany w Eksploratorze rozwiązań podczas uruchamiania aplikacji.Jeśli używasz interfejsu wiersza polecenia platformy .NET, uruchom projekt z
.Server
folderu projektu.
Aktualizowanie konfiguracji opcji usługi i punktu końcowego
Wraz z wydaniem biblioteki Blazor Web Apps na platformie .NET 8 Blazor konfiguracja opcji usługi i punktu końcowego jest aktualizowana wraz z wprowadzeniem nowego interfejsu API dla interaktywnych usług składników i konfiguracji punktu końcowego składnika.
Zaktualizowane wskazówki dotyczące konfiguracji są wyświetlane w następujących lokalizacjach:
- Ustawianie i odczytywanie środowiska aplikacji: zawiera zaktualizowane wskazówki, szczególnie w sekcji Odczytywanie środowiska po stronie klienta w Blazor Web App.
- Opcje obsługi obwodu po stronie serwera: Obejmuje nową BlazorSignalR konfigurację opcji obwodu i koncentratora.
- Renderowanie Razor składników z języka JavaScript: obejmuje rejestrację składnika dynamicznego za pomocą polecenia RegisterForJavaScript.
- Blazor: Blazor Web App obejmuje rejestrację elementu niestandardowego składnika głównego za pomocą polecenia .
- Prefiks dla Blazor WebAssembly zasobów: obejmuje kontrolę ciągu ścieżki, który wskazuje prefiks dla Blazor WebAssembly zasobów.
- Czas trwania ważności tymczasowego adresu URL przekierowania: obejmuje kontrolę nad okresem ważności ochrony danych dla tymczasowych adresów URL przekierowania emitowanych przez Blazor renderowanie po stronie serwera.
- Szczegółowe błędy: Obejmuje włączanie szczegółowych błędów renderowania po stronie serwera dla Razor komponentu.
- Konfiguracja prerenderingu: prerendering jest domyślnie włączony dla Blazor Web Appów. Postępuj zgodnie z tym linkiem, aby uzyskać wskazówki dotyczące wyłączania prerenderingu, jeśli masz specjalne okoliczności, które wymagają, aby aplikacja wyłączyła prerendering.
- Opcje powiązania formularza: obejmuje konfigurację opcji powiązania formularza.
Usuwanie Blazor Server przy użyciu obejścia routingu yarp
Jeśli wcześniej wykonano instrukcje opisane w artykule Włączanie obsługi platformy ASP.NET Core Blazor Server przy użyciu usługi Yarp w migracji przyrostowej na potrzeby migracjiBlazor Server aplikacji z usługą Yarp do platformy .NET 6 lub .NET 7, możesz odwrócić kroki obejścia, które zostały zastosowane podczas wykonywania instrukcji zawartych w artykule. Routing i głębokie łączenie z Blazor Server usługą Yarp działa poprawnie na platformie .NET 8.
Migrowanie CascadingValue
składników w składnikach układu
Parametry kaskadowe nie przekazują danych przez granice trybu renderowania, a układy są statycznie renderowane w innych aplikacjach interaktywnych. W związku z tym aplikacje, które chcą używać parametrów kaskadowych w składnikach renderowanych interakcyjnie, nie będą mogły kaskadowo stosować wartości z układu.
Dwa podejścia do migracji to:
- (Zalecane) Przekaż stan jako wartość kaskadową na poziomie głównym. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące kaskadowych wartości na poziomie głównym i kaskadowych wartości na poziomie głównym z powiadomieniami.
- Zawijanie routera w składniku
Routes
CascadingValue
za pomocą składnika iRoutes
interakcyjne renderowanie składnika. Aby zapoznać się z przykładem, zobaczCascadingValue
składnik.
Aby uzyskać więcej informacji, zobacz Kaskadowe wartości/parametry i granice trybu renderowania.
BlazorEnableCompression
Migrowanie właściwości MSBuild
W przypadku Blazor WebAssembly aplikacji, które wyłączają kompresję i docelową platformę .NET 7 lub starszą, ale są kompilowane przy użyciu zestawu .NET 8 SDK, BlazorEnableCompression
właściwość MSBuild została zmieniona na CompressionEnabled
:
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
W przypadku korzystania z polecenia publikowania interfejsu wiersza polecenia platformy .NET użyj nowej właściwości:
dotnet publish -p:CompressionEnabled=false
Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Zmiana łamiąca zgodność flagi kompresji statycznych zasobów sieci Web (dotnet/ogłoszenia #283)
- Hostowanie i wdrażanie ASP.NET Core Blazor WebAssembly
<CascadingAuthenticationState>
Migrowanie składnika do kaskadowych usług stanu uwierzytelniania
Na platformie .NET 7 lub starszej CascadingAuthenticationState składnik jest owinięty wokół części drzewa interfejsu użytkownika, na przykład wokół routera Blazor , aby zapewnić stan uwierzytelniania kaskadowego:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
Na platformie .NET 8 nie używaj CascadingAuthenticationState składnika:
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Zamiast tego dodaj kaskadowe usługi stanu uwierzytelniania do kolekcji usług, wywołując AddCascadingAuthenticationState w Program
pliku:
builder.Services.AddCascadingAuthenticationState();
Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Blazor ASP.NET Core
- Uwierzytelnianie i autoryzacja ASP.NET Core Blazor
Nowy artykuł dotyczący problemów z buforowaniem HTTP
Dodaliśmy nowy artykuł, w którym omówiono niektóre typowe problemy z buforowaniem HTTP, które mogą wystąpić podczas uaktualniania Blazor aplikacji w różnych wersjach głównych oraz sposobu rozwiązywania problemów z buforowaniem HTTP.
Aby uzyskać więcej informacji, zobacz Blazor ASP.NET Core.
Nowy artykuł dotyczący bibliotek klas ze statycznym renderowaniem po stronie serwera (statyczny przewodnik SSR)
Dodaliśmy nowy artykuł, który omawia autoryzacje biblioteki składników w Razor bibliotekach klas (RCLs) ze statycznym renderowaniem po stronie serwera (static SSR).
Aby uzyskać więcej informacji, zobacz ASP.NET Core class libraries (RCLs) with static server-side rendering (static SSR) (Biblioteki klas core Razor (RCLS) ze statycznym renderowaniem po stronie serwera (static SSR).
Odnajdywanie składników z dodatkowych zestawów
Podczas migracji z aplikacji Blazor Server do aplikacji Blazor Web App zapoznaj się z wytycznymi dotyczącymi Blazor trasowania i nawigacji w ASP.NET Core, jeśli aplikacja używa składników umożliwiających trasowanie z dodatkowych zestawów, takich jak biblioteki klas składników.
Porzucanie [Parameter]
atrybutu, gdy parametr jest dostarczany z ciągu zapytania
Atrybut [Parameter]
nie jest już wymagany podczas podawania parametru z ciągu zapytania:
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server autoryzacja zasad rezerwowych skryptów
Na platformie .NET 7 Blazor Server skrypt (blazor.server.js
) jest obsługiwany przez oprogramowanie pośredniczące plików statycznych. Umieszczenie wywołania oprogramowania pośredniczącego plików statycznych (UseStaticFiles) w potoku przetwarzania żądań przed wywołaniem oprogramowania pośredniczącego autoryzacji (UseAuthorization) jest wystarczające w aplikacjach platformy .NET 7 do obsługi skryptu Blazor użytkownikom anonimowym.
Na platformie .NET 8 Blazor Server skrypt jest obsługiwany przez własny punkt końcowy przy użyciu routingu punktu końcowego. Ta zmiana została wprowadzona przez naprawioną usterkę — przekazywanie opcji do UseStaticFiles powoduje problemy Blazor Server (dotnet/aspnetcore
#45897).
Rozważ scenariusz z wieloma dzierżawami, w którym:
- Zarówno domyślne, jak i rezerwowe zasady są ustawione identycznie.
- Dzierżawa jest rozpoznawana przy użyciu pierwszego segmentu w ścieżce żądania (na przykład
tld.com/tenant-name/...
). - Żądania do punktów końcowych dzierżawy są uwierzytelniane przez dodatkowy schemat uwierzytelniania, który dodaje dodatkową tożsamość do głównego podmiotu żądania.
- Zasady autoryzacji rezerwowej mają wymagania dotyczące sprawdzania oświadczeń za pośrednictwem dodatkowej tożsamości.
Żądania dotyczące pliku skryptu Blazor (blazor.server.js
) są obsługiwane pod adresem /_framework/blazor.server.js
, który jest zakodowany na stałe w strukturze. Żądania dotyczące pliku nie są uwierzytelniane przez dodatkowy schemat uwierzytelniania dla dzierżaw, ale nadal są sprawdzane przez politykę rezerwową, co powoduje zwrócenie nieautoryzowanej odpowiedzi.
Ten problem jest obecnie oceniany jako nowa funkcja w MapRazorComponents z wymogiem FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore
51836), co jest zaplanowane na wydanie w .NET 9 w listopadzie 2024 roku. Do tego czasu można obejść ten problem przy użyciu dowolnego z następujących trzech podejść:
Nie używaj zasad rezerwowych.
[Authorize]
Zastosuj atrybut w_Imports.razor
pliku, aby zastosować go do wszystkich składników aplikacji. W przypadku punktów końcowych innych niż blazor jawnie użyj[Authorize]
lubRequireAuthorization
.Dodaj
[AllowAnonymous]
do punktu końcowego/_framework/blazor.server.js
Program
w pliku:app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });
Zarejestruj niestandardowy
AuthorizationHandler
, który sprawdzaHttpContext
, aby umożliwić przejście pliku/_framework/blazor.server.js
.
Doker
Aktualizowanie obrazów platformy Docker
W przypadku aplikacji korzystających z platformy Docker zaktualizuj instrukcje i skrypty dockerfileFROM
. Użyj obrazu podstawowego zawierającego środowisko uruchomieniowe platformy .NET 8. Rozważmy następującą docker pull
różnicę poleceń między platformą ASP.NET Core na platformie .NET 7 i .NET 8:
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Aktualizowanie portu platformy Docker
Domyślny port ASP.NET Core skonfigurowany w obrazach kontenerów platformy .NET został zaktualizowany z portu 80 do 8080.
Nowa ASPNETCORE_HTTP_PORTS
zmienna środowiskowa została dodana jako prostsza alternatywa dla ASPNETCORE_URLS
elementu .
Aby uzyskać więcej informacji, zobacz:
- Domyślny port ASP.NET Core został zmieniony z 80 na 8080.
-
Określ tylko porty z
ASPNETCORE_HTTP_PORTS
Przeglądanie zmian powodujących niezgodność
W przypadku zmian powodujących niezgodność z platformy .NET 7 do .NET 8 zobacz Istotne zmiany na platformie .NET 8, które obejmują sekcje ASP.NET Core i Entity Framework Core .