この記事では、.NET 7 プロジェクトの既存の ASP.NET Core を .NET 8 に更新する方法について説明します。
[前提条件]
ASP.NET および Web 開発ワークロードを含む Visual Studio 2022。
global.json で .NET SDK のバージョンを更新する
特定の .NET SDK バージョンを対象とする global.json ファイルに依存している場合は、 version プロパティをインストールされている .NET 8 SDK バージョンに更新します。 例えば次が挙げられます。
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
ターゲット フレームワークを更新する
プロジェクト ファイルのターゲット フレームワーク モニカー (TFM) を net8.0 に更新します。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
パッケージ参照の更新
プロジェクト ファイルで、各 Microsoft.AspNetCore.*、 Microsoft.EntityFrameworkCore.*、 Microsoft.Extensions.*、 System.Net.Http.Json パッケージ参照の Version 属性を 8.0.0 以降に更新します。 例えば次が挙げられます。
<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
次の移行シナリオについて説明します。
- Blazor Server アプリを更新する
- すべての Blazor Web App 規則を導入する
- Blazor Server アプリを Blazor Web App に変換する
- Blazor WebAssembly アプリを更新する
- ホストされた Blazor WebAssembly アプリを Blazor Web App に変換する
- サービスとエンドポイントのオプション構成を更新する
- Yarp ルーティングによるドロップ Blazor Server の回避策
-
レイアウト コンポーネント内の
CascadingValueコンポーネントを移行する -
BlazorEnableCompressionMSBuild プロパティを移行する -
<CascadingAuthenticationState>コンポーネントをカスケード認証状態サービスに移行する - 新しい記事: 移行中の HTTP キャッシュの問題
- 新しい記事: 静的サーバー側レンダリング (静的 SSR) でのクラス ライブラリに関する新しい記事
- 追加アセンブリからコンポーネントを検出する
-
パラメーターがクエリ文字列から指定されたときに
[Parameter]属性を削除する - Blazor Server スクリプトのフォールバック ポリシー承認
ASP.NET Core アプリにBlazorサポートを追加する方法については、「mvc または Razor Pages を使用したコア Razor コンポーネント ASP.NET 統合を参照してください。
Blazor Server アプリを更新する
.NET 8 で Blazor Web App を使用することを推奨していますが、Blazor Server はサポートされています。 .NET 8 で Blazor Server を引き続き使用するには、この記事の最初の 3 つのセクションのガイダンスに従ってください。
Blazor で導入された新しい Blazor Web App 機能は、.NET 8 の下で実行されるように更新された Blazor Server アプリで利用できません。 新しい .NET 8 Blazor 機能を導入する場合、次のいずれかのセクションのガイドに従ってください。
すべての Blazor Web App 規則を導入する
必要に応じて、すべての新しい Blazor Web App 規則を導入するには、次のプロセスをお勧めします。
- Blazor Web App プロジェクト テンプレートから新しいアプリを作成します。 詳しくは、「ASP.NET Core Blazor 用のツール」をご覧ください。
- アプリのコンポーネントとコードを新しい Blazor Web App に移動し、新機能を導入するように変更します。
- Blazor Web App のレイアウトとスタイルを更新します。
.NET 8 の新機能については、 .NET 8 の ASP.NET Core の新機能を説明します。 .NET 6 以前からアプリを更新する場合は、途中のリリースに関する移行とリリース ノート ("新機能" の記事) をご覧ください。
Blazor Server アプリを Blazor Web App に変換する
Blazor Server アプリは、コードを変更しなくても .NET 8 でサポートされています。 Blazor Server アプリを同等の .NET 8 Blazor Web App に変換するには、次のガイダンスをご覧ください。これにより、.NET 8 の新機能をすべて利用できるようになります。
Important
このセクションでは、.NET 7 Blazor Server アプリを .NET 8 Blazor Web App に変換するために必要な最小限の変更について説明します。 新しい Blazor Web App 規則をすべて導入するには、「すべての Blazor Web App 規則を導入する」セクションのガイダンスに従います。
この記事の最初の 3 つのセクションのガイダンスに従ってください。
Appコンポーネント (App.razor) の内容を、プロジェクトのルート フォルダーに追加された新しいRoutesコンポーネント ファイル (Routes.razor) に移動します。 空のApp.razorファイルは、プロジェクトのルート フォルダー内のアプリに残しておきます。_Imports.razorファイルにエントリを追加して、アプリで短縮レンダリング モードを使用できるようにします。@using static Microsoft.AspNetCore.Components.Web.RenderMode_Hostページ (Pages/_Host.cshtml) の内容を、空のApp.razorファイルに移動します。 続いて、Appコンポーネントを次のように変更します。注
次の例では、プロジェクトの名前空間は
BlazorServerAppです。 名前空間は、実際のプロジェクトに合わせて調整してください。json ファイルの先頭から、次の行を削除します。
- @page "/" - @using Microsoft.AspNetCore.Components.Web - @namespace BlazorServerApp.Pages - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers前の行を、IHostEnvironment インスタンスを挿入する行に置き換えます。
@inject IHostEnvironment Env~タグのhrefからチルダ (<base>) を削除し、アプリのベース パスに置き換えます。- <base href="~/" /> + <base href="/" />HeadOutlet コンポーネントのコンポーネント タグ ヘルパーを削除し、HeadOutlet コンポーネントに置き換えます。
次の行を削除します。
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />前の行を、次のコードに置き換えます。
<HeadOutlet @rendermode="InteractiveServer" />Appコンポーネントのコンポーネント タグ ヘルパーを削除し、Routesコンポーネントに置き換えます。次の行を削除します。
- <component type="typeof(App)" render-mode="ServerPrerendered" />前の行を、次のコードに置き換えます。
<Routes @rendermode="InteractiveServer" />注
上記の構成では、アプリのコンポーネントが対話型サーバー レンダリングを採用しているものと想定しています。 静的サーバー側レンダリング (SSR) を導入する方法など、詳細については、「ASP.NET Core Blazor のレンダー モード」をご覧ください。
エラー UI の環境タグ ヘルパーを削除し、次の Razor マークアップに置き換えます。
次の行を削除します。
- <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>前の行を、次のコードに置き換えます。
@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 スクリプトを
blazor.server.jsからblazor.web.jsに変更します。- <script src="_framework/blazor.server.js"></script> + <script src="_framework/blazor.web.js"></script>Pages/_Host.cshtmlファイルを削除します。以下を更新します。
Program.cs:注
次の例では、プロジェクトの名前空間は
BlazorServerAppです。 名前空間は、実際のプロジェクトに合わせて調整してください。プロジェクトの名前空間のファイルの先頭に
usingステートメントを追加します。using BlazorServerApp;AddServerSideBlazor を、AddRazorComponents と AddInteractiveServerComponents のチェーン呼び出しに置き換えます。
次の行を削除します。
- builder.Services.AddServerSideBlazor();前の行を Razor コンポーネントと対話型サーバー コンポーネント サービスに置き換えます。 AddRazorComponents を呼び出すと、既定で偽造防止サービス (AddAntiforgery) が追加されます。
builder.Services.AddRazorComponents() .AddInteractiveServerComponents();次の行を削除します。
- app.MapBlazorHub();前の行を、MapRazorComponents の呼び出しに置き換え、
Appコンポーネントをルート コンポーネントの種類として指定し、チェーン呼び出しを AddInteractiveServerRenderMode に追加します。app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();次の行を削除します。
- app.MapFallbackToPage("/_Host");ルーティング ミドルウェアの削除:
- app.UseRouting();HTTPS リダイレクト ミドルウェア () を追加する行の後に
app.UseHttpsRedirectionAntiforgery ミドルウェアを要求処理パイプラインに追加します。app.UseAntiforgery();app.UseAntiforgeryへの上記の呼び出しは、呼び出しが存在する場合は、app.UseAuthenticationしてapp.UseAuthorizationした後に行う必要があります。 前に説明したbuilder.Services.AddAntiforgeryによって自動的に追加されるため、偽造防止サービス (AddRazorComponents) を明示的に追加する必要はありません。Blazor Server アプリがプリレンダリングを無効にするように構成されていた場合は、更新されたアプリでもプリレンダリングを無効にしておくことができます。
Appコンポーネントで、@rendermodeと Razor コンポーネントの HeadOutletRoutesディレクティブ属性に割り当てられている値を変更します。プリレンダリングを無効にするには、
@rendermodeと HeadOutlet の両方のコンポーネントのRoutesディレクティブ属性の値を変更します。- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"詳細については、「ASP.NET Core Blazor レンダリング モード」を参照してください。
Blazor WebAssembly アプリを更新する
この記事の最初の 3 つのセクションのガイダンスに従ってください。
遅延アセンブリ読み込みを採用しているアプリの場合、アプリの実装内でファイル拡張子を .dll から .wasm に変更して Blazor WebAssembly による Webcil アセンブリ パッケージの導入を反映させます。
.NET 8 のリリースより前は、「ASP.NET Core でホストされる Blazor WebAssembly アプリの展開レイアウト」のガイダンスにおいて、マルチパート バンドル アプローチでクライアントによる DLL のダウンロードと実行をブロックする環境が対処されています。 .NET 8 以降では、Blazor は Webcil ファイル形式を使用してこの問題に対処します。 "WebAssembly の展開レイアウト" の記事で説明されている実験的な NuGet パッケージを使用したマルチパート バンドルは、.NET 8 以降の アプリではサポートされていません。Blazor .NET 8 以降のアプリでマルチパート バンドル パッケージを引き続き使いたい場合は、その記事のガイダンスを使って独自にマルチパート バンドルの NuGet パッケージを作成できますが、Microsoft ではそれはサポートされません。
ホストされた Blazor WebAssembly アプリを Blazor Web App に変換する
Blazor WebAssembly アプリは、コードを変更しなくても .NET 8 でサポートされています。 ASP.NET Core でホストされた Blazor WebAssembly アプリを同等の .NET 8 Blazor Web App に変換するには、次のガイダンスをご覧ください。これにより、.NET 8 の新機能をすべて利用できるようになります。
Important
このセクションでは、.NET 7 ASP.NET Core でホストされた Blazor WebAssembly アプリを .NET 8 Blazor Web App に変換するために必要な最小限の変更について説明します。 新しい Blazor Web App 規則をすべて導入するには、「すべての Blazor Web App 規則を導入する」セクションのガイダンスに従います。
この記事の最初の 3 つのセクションのガイダンスに従ってください。
Important
前のガイダンスを使って、ソリューションの
.Client、.Server、.Sharedプロジェクトを更新します。.Clientプロジェクト ファイル (.csproj) に、次の MSBuild プロパティを追加します。<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>さらに、
.Clientプロジェクト ファイルからMicrosoft.AspNetCore.Components.WebAssembly.DevServerパッケージ参照を削除します。- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />.Client/wwwroot/index.htmlファイルの内容を、Appプロジェクトのルートに作成された新しいApp.razorコンポーネント ファイル (.Server) に移動します。 ファイルの内容を移動した後、index.htmlファイルを削除します。App.razorプロジェクトの.Clientの名前を、Routes.razorに変更します。Routes.razorで、AppAssembly属性の値をtypeof(Program).Assemblyに更新します。.Clientプロジェクトで、_Imports.razorファイルにエントリを追加して、アプリで短縮レンダリング モードを使用できるようにします。@using static Microsoft.AspNetCore.Components.Web.RenderMode.Clientプロジェクトの_Imports.razorファイルのコピーを作成し、それを.Serverプロジェクトに追加します。App.razorファイルに次の変更を加えます。Web サイトの既定の Web サイト タイトル (
<title>...</title>) を HeadOutlet コンポーネントに置き換えます。 後で使用するために Web サイトのタイトルをメモし、タイトル タグとタイトルを削除します。- <title>...</title>タイトルを削除した場所に、Interactive WebAssembly レンダリング モードを割り当てる HeadOutlet コンポーネントを配置します (プリレンダリングは無効)。
<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />CSS スタイル バンドルを変更します:
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet"> + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">前のコードのプレースホルダー:
-
{CLIENT PROJECT ASSEMBLY NAME}: クライアント プロジェクト アセンブリ名。 例:BlazorSample.Client -
{SERVER PROJECT ASSEMBLY NAME}: サーバー プロジェクト アセンブリ名。 例:BlazorSample.Server
次の
<div>...</div>HTML マークアップを見つけます。- <div id="app"> - ... - </div>上の
<div>...</div>HTML マークアップを、対話型 WebAssembly レンダリング モード (プリレンダリングは無効) を使うRoutesコンポーネントに置き換えます。<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />blazor.webassembly.jsスクリプトをblazor.web.jsに更新します。- <script src="_framework/blazor.webassembly.js"></script> + <script src="_framework/blazor.web.js"></script>-
.Clientプロジェクトのレイアウト ファイル (.Client/Shared/MainLayout.razor) を開き、Web サイトの既定のタイトル (PageTitle プレースホルダー) を含む{TITLE}コンポーネントを追加します。<PageTitle>{TITLE}</PageTitle>注
その他のレイアウト ファイルでも、既定の Web サイト タイトルを含む PageTitle コンポーネントを受け取る必要があります。
詳しくは、「ASP.NET Core Blazor アプリで コンテンツを制御する」をご覧ください。
.Client/Program.csから次の行を削除します。- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");以下を更新します。
.Server/Program.cs:Razor コンポーネントと対話型 WebAssembly コンポーネント サービスをプロジェクトに追加します。 AddRazorComponents へのチェーン呼び出しを含む AddInteractiveWebAssemblyComponents を呼び出します。 AddRazorComponents を呼び出すと、既定で偽造防止サービス (AddAntiforgery) が追加されます。
builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();要求処理パイプラインに、偽造防止ミドルウェアを追加します。
app.UseHttpsRedirectionの呼び出しの後に次の行を配置します。app.UseAntiforgeryへの呼び出しは、呼び出しが存在する場合は、app.UseAuthenticationしてapp.UseAuthorizationした後に行う必要があります。 前に説明したbuilder.Services.AddAntiforgeryによって自動的に追加されるため、偽造防止サービス (AddRazorComponents) を明示的に追加する必要はありません。app.UseAntiforgery();次の行を削除します。
- app.UseBlazorFrameworkFiles();次の行を削除します。
- app.MapFallbackToFile("index.html");前の行を、MapRazorComponents の呼び出しに置き換え、
Appコンポーネントをルート コンポーネントの種類として指定し、チェーン呼び出しを AddInteractiveWebAssemblyRenderMode と AddAdditionalAssemblies に追加します。app.MapRazorComponents<App>() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);前の例で、
{CLIENT APP NAMESPACE}プレースホルダーは.Clientプロジェクトの名前空間です (例:HostedBlazorApp.Client)。.Serverプロジェクトからソリューションを実行します。Visual Studio の場合は、アプリを実行するときに、
.Serverで プロジェクトが選択されていることを確認します。.NET CLI をっている場合は、
.Serverプロジェクトのフォルダーからプロジェクトを実行します。
サービスとエンドポイントのオプション構成を更新する
.NET 8 での Blazor Web App のリリースにともない、Blazor サービスとエンドポイントのオプション構成が更新され、インタラクティブなコンポーネント サービスとコンポーネント エンドポイント構成のための新しい API が導入されました。
更新された構成ガイダンスは次の場所に表示されます。
- アプリの環境の設定と読み取り: 特に「Blazor Web App のクライアント側環境の読み取り」というセクションに更新されたガイダンスが含まれています。
- サーバー側回線ハンドラー オプション: 新しい Blazor-SignalR 回線とハブのオプション構成を扱います。
- JavaScript から Razor コンポーネントをレンダリングする: RegisterForJavaScript による動的コンポーネント登録を扱います。
-
Blazor カスタム要素: Blazor Web App 登録:
RegisterCustomElementによるルート コンポーネント カスタム要素登録を扱います。 - Blazor WebAssembly アセットのプレフィックス: Blazor WebAssembly アセットのプレフィックスを示すパス文字列のコントロールを扱います。
- 一時的なリダイレクト URL の有効期間: Blazor サーバー側レンダリングによって出力された一時的なリダイレクト URL のデータ保護期間の制御を扱います。
- 詳細なエラー: Razor コンポーネント サーバー側レンダリングの詳細なエラーを有効にする方法について扱います。
- プリレンダリング構成: Blazor Web App では、プリレンダリングが既定で有効になっています。 アプリでプリレンダリングを無効にする必要がある特別な状況の場合、プリレンダリングを無効にする方法についてはこのリンクを参照してください。
- フォームのバインド オプション: フォームのバインド オプションの構成について説明します。
Yarp ルーティングによるドロップ Blazor Server の回避策
以前に、Yarp を使用して Blazor Server アプリを .NET 6 または .NET 7 に移行するための増分移行 で Yarp で 方法に関する記事のガイダンスに従っている場合は、記事のガイダンスに従うときに実行した回避策の手順を元に戻すことができます。 Yarp を使用した Blazor Server のルーティングとディープ リンクは、.NET 8 で正しく機能します。
レイアウト コンポーネント内のCascadingValue コンポーネントを移行する
カスケード パラメーターでレンダー モードの境界を越えてデータが渡されることはなく、それ以外の場合は対話型のアプリで、レイアウトが静的にレンダリングされます。 そのため、対話形式でレンダリングされるコンポーネントでカスケード パラメーターを使用しようとするアプリでは、レイアウトから値をカスケードすることはできません。
移行の 2 つの方法は次のとおりです。
- (推奨) 状態をルート レベルのカスケード値として渡します。 詳細については、通知を使用した ルート レベルのカスケード値 と ルート レベルのカスケード値に関するガイダンスを参照してください。
-
Routesコンポーネント内のルーターをCascadingValueコンポーネントでラップし、Routesコンポーネントが対話形式でレンダリングされるようにします。 例については、「CascadingValueコンポーネント」を参照してください。
詳細については、「カスケード値/パラメーターとレンダリング モードの境界」を参照してください。
BlazorEnableCompression MSBuild プロパティを移行する
圧縮を無効にし、.NET 7 以前をターゲットとするが、.NET 8 SDK でビルドされている Blazor WebAssembly アプリの場合、BlazorEnableCompression MSBuild プロパティは CompressionEnabled に変更されています。
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
.NET CLI の publish コマンドを使う場合は、新しいプロパティを使用します。
dotnet publish -p:CompressionEnabled=false
詳細については、次のリソースを参照してください。
<CascadingAuthenticationState> コンポーネントをカスケード認証状態サービスに移行する
.NET 7 以前では、CascadingAuthenticationState コンポーネントは UI ツリーの一部 (Blazor ルーターなど) にラップされ、カスケード認証状態が提供されます。
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
.NET 8 では、CascadingAuthenticationState コンポーネントを使わないでください。
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
代わりに、AddCascadingAuthenticationState を呼び出してカスケード認証状態サービスを Program ファイル内のサービス コレクションに追加します。
builder.Services.AddCascadingAuthenticationState();
詳細については、次のリソースを参照してください。
- ASP.NET Core Blazor の認証と認可に関する記事
- ASP.NET Core Blazor の認証と認可
HTTP キャッシュの問題に関する新しい記事
メジャー バージョン間で Blazor アプリをアップグレードするときに発生する可能性がある HTTP キャッシュに関する一般的な問題と、HTTP キャッシュの問題に対処する方法について説明する新しい記事が追加されました。
詳しくは、「ASP.NET Core Blazor アプリをアップグレードするときに HTTP キャッシュの問題を回避する」をご覧ください。
静的サーバー側レンダリング (静的 SSR) でのクラス ライブラリに関する新しい記事
静的サーバー側レンダリング (静的 SSR) の場合の Razor クラス ライブラリ (RCL) でのコンポーネント ライブラリの作成について説明する新しい記事が追加されました。
詳しくは、「ASP.NET Core の Razor クラス ライブラリ (RCL) と静的サーバー側レンダリング (静的 SSR)」をご覧ください。
追加アセンブリからコンポーネントを検出する
Blazor Server アプリから Blazor Web App に移行するとき、コンポーネント クラス ライブラリなどの追加アセンブリのルーティング可能なコンポーネントをアプリで使っている場合は、「ASP.NET Core の Blazor ルーティングとナビゲーション」のガイダンスをご覧ください。
パラメーターがクエリ文字列から指定されたときに [Parameter] 属性を削除する
クエリ文字列からパラメーターを指定するときに [Parameter] 属性は不要になりました。
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server スクリプトのフォールバック ポリシー承認
.NET 7 では、 Blazor Server スクリプト (blazor.server.js) は 静的ファイル ミドルウェアによって提供されます。 .NET 7 アプリでは、承認ミドルウェア (UseStaticFiles) の呼び出しの前に、静的ファイル ミドルウェア (UseAuthorization) の呼び出しを要求処理パイプラインに配置するだけで、匿名ユーザーにBlazorスクリプトを提供できます。
.NET 8 では、Blazor Server スクリプトは、エンドポイント ルーティングを使用して、独自のエンドポイントによって提供されます。 この変更は、バグの修正 - UseStaticFiles にオプションを渡すと Blazor Server が破損する (dotnet/aspnetcore #45897) によって導入されます。
次のようなマルチテナント シナリオについて考えてみましょう。
- 既定のポリシーとフォールバック ポリシーの両方が同じように設定されます。
- テナントは、要求パスの最初のセグメント (たとえば、
tld.com/tenant-name/...) を使用して解決されます。 - テナント エンドポイントへの要求は、追加の認証スキームによって認証され、要求プリンシパルに ID が追加されます。
- フォールバック承認ポリシーには、追加の ID を使用して要求をチェックする要件があります。
Blazor スクリプト ファイル (blazor.server.js) の要求は、フレームワークでハードコーディングされた /_framework/blazor.server.js で処理されます。 ファイルの要求は、テナントの追加の認証スキームによって認証されるのではなく、"フォールバック ポリシーによって引き続きチャレンジされ"、未承認の結果が返されます。
この問題は、FallbackPolicy RequireAuthenticatedUser で破損した MapRazorComponents (dotnet/aspnetcore 51836) で新しいフレームワーク機能の評価中です。これは現在、2024 年 11 月の .NET 9 のリリースで予定されています。 それまでは、次の 3 つの方法のいずれかを使用して、この問題を回避できます。
フォールバック ポリシーを使用しません。
[Authorize]ファイル内の_Imports.razor属性を適用して、アプリのすべてのコンポーネントに適用します。 blazor 以外のエンドポイントの場合は、[Authorize]またはRequireAuthorizationを明示的に使用します。[AllowAnonymous]ファイルの/_framework/blazor.server.jsエンドポイントにProgramを追加します。app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });AuthorizationHandlerファイルを許可するためにHttpContextをチェックするカスタム/_framework/blazor.server.jsを登録します。
Docker
Docker イメージの更新
Docker を使用するアプリの場合、DockerfileFROM ステートメントおよびスクリプトを更新します。 .NET 8 ランタイムを含む基本イメージを使用します。 .NET 7 と .NET 8 の ASP.NET Core の docker pull コマンドの違いを考えてみましょう。
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Docker ポートを更新する
.NET コンテナー イメージで構成された既定の ASP.NET Core ポートが、ポート 80 から 8080 に更新されました。
新しい ASPNETCORE_HTTP_PORTS の環境変数が、ASPNETCORE_URLS のよりシンプルな代替として追加されました。
詳細については、以下を参照してください。
重大な変更
.NET の破壊的変更に関する記事を使用して、アプリを新しいバージョンの .NET にアップグレードするときに適用される可能性のある破壊的変更を見つけます。
ASP.NET Core