ASP.NET Core 9.0 の新機能
この記事では、ASP.NET Core 9.0 の最も大きな変更点について説明します。また、関連するドキュメントへのリンクも示します。
この記事は、.NET 9 Preview 3 に合わせて更新されました。
Blazor
このセクションでは、Blazor の新機能について説明します。
コンストラクターの挿入
Razor コンポーネントではコンストラクターの挿入をサポートしています。
次の例では、部分 (コードビハインド) クラスで、プライマリ コンストラクターを使用して NavigationManager
サービスを挿入します。
public partial class ConstructorInjection(NavigationManager navigation)
{
protected NavigationManager Navigation { get; } = navigation;
}
詳細については、「ASP.NET Core Blazor の依存関係の挿入」を参照してください。
対話型サーバー コンポーネントの Websocket 圧縮
既定の場合、対話型サーバー コンポーネントでは WebSocket 接続の圧縮を有効にし、frame-ancestors
コンテンツ セキュリティ ポリシー (CSP) ディレクティブを 'self'
に設定します。これは、圧縮が有効になっている場合または WebSocket コンテキストの構成が提供されている場合にのみ、アプリの提供元の <iframe>
にアプリを埋め込むことを許可します。
圧縮を無効にするには、ConfigureWebSocketOptions
を null
に設定します。こうすると、攻撃対象のアプリの脆弱性は低くなりますが、パフォーマンスが低下するおそれがあります。
.AddInteractiveServerRenderMode(o => o.ConfigureWebSocketOptions = null)
値 'none'
を指定 (単一引用符が必要) してより厳格な frame-ancestors
CSP を構成します。これで WebSocket 圧縮が可能になりますが、ブラウザーでアプリを <iframe>
に埋め込むことはできなくなります。
.AddInteractiveServerRenderMode(o => o.ContentSecurityFrameAncestorsPolicy = "'none'")
詳細については、次のリソースを参照してください。
Blazor でキーボード コンポジション イベントを処理する
新しい KeyboardEventArgs.IsComposing
プロパティは、キーボード イベントがコンポジション セッションの一部であるかどうかを表します。 キーボード イベントのコンポジション状態を追跡することは、国際的な文字入力方式を処理するために重要です。
SignalR
このセクションでは、SignalR の新機能について説明します。
SignalR ハブでのポリモーフィック型のサポート
ハブ メソッドは、派生クラスではなく基底クラスを受け入れて、ポリモーフィックなシナリオを有効にできるようになりました。 ポリモーフィズムを許可するには、基本型に注釈を付ける必要があります。
public class MyHub : Hub
{
public void Method(JsonPerson person)
{
if (person is JsonPersonExtended)
{
}
else if (person is JsonPersonExtended2)
{
}
else
{
}
}
}
[JsonPolymorphic]
[JsonDerivedType(typeof(JsonPersonExtended), nameof(JsonPersonExtended))]
[JsonDerivedType(typeof(JsonPersonExtended2), nameof(JsonPersonExtended2))]
private class JsonPerson
{
public string Name { get; set; }
public Person Child { get; set; }
public Person Parent { get; set; }
}
private class JsonPersonExtended : JsonPerson
{
public int Age { get; set; }
}
private class JsonPersonExtended2 : JsonPerson
{
public string Location { get; set; }
}
最小 Api
このセクションでは、最小 API の新機能について説明します。
InternalServerError
と InternalServerError<TValue>
を TypedResults
に追加しました
この TypedResults クラスは、厳密に型指定された HTTP 状態コードベースの応答を最小限の API から返すのに役立つ手段です。 TypedResults
には、エンドポイントから "500 内部サーバー エラー" 応答を返すファクトリ メソッドと型が含まれるようになりました。 500 応答を返す例を次に示します。
var app = WebApplication.Create();
app.MapGet("/", () => TypedResults.InternalServerError("Something went wrong!"));
app.Run();
認証と認可
このセクションでは、認証と認可の新機能について説明します。
OIDC と OAuth パラメーターのカスタマイズ
OAuth および OIDC 認証ハンドラーには、通常はリダイレクト クエリ文字列の一部として含まれる認可メッセージ パラメーターを簡単にカスタマイズするための AdditionalAuthorizationParameters
オプションが追加されました。 .NET 8 以前でこれを行うには、カスタム ハンドラー内のカスタム OnRedirectToIdentityProvider コールバックまたはオーバーライドされた BuildChallengeUrl メソッドが必要です。 .NET 8 コードの例を次に示します。
builder.Services.AddAuthentication().AddOpenIdConnect(options =>
{
options.Events.OnRedirectToIdentityProvider = context =>
{
context.ProtocolMessage.SetParameter("prompt", "login");
context.ProtocolMessage.SetParameter("audience", "https://api.example.com");
return Task.CompletedTask;
};
});
上記の例は、次に示すコードに簡略化できるようになりました。
builder.Services.AddAuthentication().AddOpenIdConnect(options =>
{
options.AdditionalAuthorizationParameters.Add("prompt", "login");
options.AdditionalAuthorizationParameters.Add("audience", "https://api.example.com");
});
HTTP.sys 拡張認証フラグを構成する
Windows 認証の処理方法を最適化するために、HTTP.sys AuthenticationManager で新しい EnableKerberosCredentialCaching
および CaptureCredentials
プロパティを使用することで、HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING
および HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIAL
HTTP.sys フラグを構成できるようになりました。 次に例を示します。
webBuilder.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.Negotiate;
options.Authentication.EnableKerberosCredentialCaching = true;
options.Authentication.CaptureCredentials = true;
});
その他
以下のセクションでは、その他の新機能について説明します。
開発者例外ページのエンドポイント メタデータ
MVC アクション、最小限の API、gRPC メソッドに追加される属性は、エンドポイント メタデータの例です。 ASP.NET Core では、エンドポイント メタデータを使って、ルーティング、認証と承認、応答キャッシュ、レート制限、OpenAPI 生成などのエンドポイント動作を制御します。
.NET 9 では、開発者例外ページにメタデータが追加されます。 新しいメタデータ情報が、他のルーティング情報とともに Routing
セクションに表示されます。 この情報により、開発中に ASP.NET Core のエラーをデバッグしやすくなります。 次の画像は、開発者例外ページの新しいメタデータ情報を示しています。
ディクショナリのデバッグの機能強化
ディクショナリやその他のキー値コレクションのデバッグ表示のレイアウトが改善されました。 キーは、値と連結されるのではなく、デバッガーのキー列に表示されます。 次の図に、デバッガーでのディクショナリの新旧の表示を示します。
以前:
以後:
ASP.NET Core には、多くのキー値コレクションがあります。 この改善されたデバッグ エクスペリエンスは、次に適用されます。
- HTTP ヘッダー
- クエリ文字列
- フォーム
- Cookies
- データの表示
- ルート データ
- 特徴
ASP.NET Core
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示