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> にアプリを埋め込むことを許可します。

圧縮を無効にするには、ConfigureWebSocketOptionsnull に設定します。こうすると、攻撃対象のアプリの脆弱性は低くなりますが、パフォーマンスが低下するおそれがあります。

.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 の新機能について説明します。

InternalServerErrorInternalServerError<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
  • データの表示
  • ルート データ
  • 特徴