次の方法で共有


ASP.NET Core 10.0 の新機能

この記事では、ASP.NET Core 10.0 の最も重要な変更点と、関連するドキュメントへのリンクについて説明します。

この記事は、新しいプレビュー リリースが利用可能になると更新されます。 このページが更新されるまで、Asp.Net Core のお知らせページ を参照してください。

Blazor

このセクションでは、Blazorの新機能について説明します。

QuickGridRowClass パラメーター

新しい RowClass パラメーターを使用して、行項目に基づいてグリッドの行にスタイルシート クラスを適用します。 次の例では、各行に対して GetRowCssClass メソッドを呼び出して、行項目に基づいてスタイルシート クラスを条件付きで適用します。

<QuickGrid ... RowClass="GetRowCssClass">
    ...
</QuickGrid>

@code {
    private string GetRowCssClass(MyGridItem item) =>
        item.IsArchived ? "row-archived" : null;
}

詳細については、ASP.NET Core Blazor 'QuickGrid' コンポーネントを参照してください。

静的 Web アセットとしての Blazor スクリプト

.NET の以前のリリースでは、Blazor スクリプトは、ASP.NET Core 共有フレームワークの埋め込みリソースから提供されます。 .NET 10 以降では、Blazor スクリプトは、自動圧縮とフィンガープリントを備えた静的 Web 資産として機能します。

詳細については、次のリソースを参照してください。

ルート テンプレートの強調表示

[Route] 属性 では、ルート テンプレートの構造を視覚化するのに役立つルート構文の強調表示がサポートされるようになりました。

カウンター値のためのルート属性におけるルートテンプレートパターンが構文を強調表示します

SignalR

このセクションでは、SignalRの新機能について説明します。

最小限の API

このセクションでは、最小限の API の新機能について説明します。

OpenAPI

このセクションでは、OpenAPI の新機能について説明します。

OpenAPI 3.1 のサポート

ASP.NET Core では、.NET 10 で OpenAPI バージョン 3.1 ドキュメント 生成するためのサポートが追加されました。 OpenAPI 3.1 はマイナー バージョンのアップグレードですが、OpenAPI 仕様の重要な更新であり、特に JSON Schema draft 2020-12 を完全にサポートしています。

生成された OpenAPI ドキュメントに表示される変更の一部を次に示します。

  • null 許容型のスキーマに、nullable: true プロパティが含まれなくなりました。
  • nullable: true プロパティの代わりに、type キーワードがあり、その値は型の 1 つとして null を含む配列です。

この機能では、生成されたドキュメントの既定の OpenAPI バージョンが3.1。 バージョンは、AddOpenApi configureOptions デリゲート パラメーターで、OpenApiOptionsOpenApiVersion プロパティを明示的に設定することで変更できます。

builder.Services.AddOpenApi(options =>
{
    // Specify the OpenAPI version to use.
    options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});

ビルド時に OpenAPI ドキュメントを生成する場合は、OpenApiGenerateDocumentsOptions MSBuild 項目で --openapi-version を設定することで、OpenAPI バージョンを選択できます。

    <!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
    <OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>

OpenAPI 3.1 のサポートは、次の PRで大幅に追加されました。

OpenAPI 3.1 の破壊的変更

OpenAPI 3.1 をサポートするには、基になる OpenAPI.NET ライブラリを新しいメジャー バージョン 2.0 に更新する必要があります。 この新しいバージョンには、以前のバージョンからいくつかの破壊的変更があります。 重大な変更は、ドキュメント、操作、またはスキーマ トランスフォーマーがある場合に、アプリに影響を与える可能性があります。

最も重要な変更の 1 つは、JsonNode を直接使用することを優先して、OpenApiAny クラスが削除されていることです。 OpenApiAny を使用するトランスフォーマーは、JsonNodeを使用するように更新する必要があります。 次の相違は、.NET 9 から .NET 10 へのスキーマ トランスフォーマーの変更を示しています。

options.AddSchemaTransformer((schema, context, cancellationToken) =>
{
    if (context.JsonTypeInfo.Type == typeof(WeatherForecast))
    {
-       schema.Example = new OpenApiObject
+       schema.Example = new JsonObject
        {
-           ["date"] = new OpenApiString(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")),
+           ["date"] = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"),
-           ["temperatureC"] = new OpenApiInteger(0),
+           ["temperatureC"] = 0,
-           ["temperatureF"] = new OpenApiInteger(32),
+           ["temperatureF"] = 32,
-           ["summary"] = new OpenApiString("Bracing"),
+           ["summary"] = "Bracing",
        };
    }
    return Task.CompletedTask;
});

これらの変更は、OpenAPI バージョンを 3.0 に接続する場合にのみ必要であることに注意してください。

Yaml での OpenAPI

ASP.NET では、生成された OpenAPI ドキュメントを YAML 形式で提供できるようになりました。 YAML は JSON よりも簡潔な記述が可能であり、中括弧や引用符を推測できる場合は省略できます。 YAML では複数行の文字列もサポートされています。これは、長い説明に役立ちます。

生成された OpenAPI ドキュメントを YAML 形式で処理するようにアプリを構成するには、次の例に示すように、MapOpenApi 呼び出しのエンドポイントを ".yaml" または ".yml" サフィックスで指定します。

app.MapOpenApi("/openapi/{documentName}.yaml");

サポート対象:

  • YAML は現在、OpenAPI エンドポイントから提供される OpenAPI でのみ使用できます。
  • ビルド時に YAML 形式で OpenAPI ドキュメントを生成することは、今後のプレビューで追加されます。

生成された OpenAPI ドキュメントを YAML 形式で提供するためのサポートを追加したこの PR 参照してください。

ProducesResponseType の応答の説明

ProducesAttributeProducesResponseTypeAttribute、および ProducesDefaultResponseType 属性は、応答の説明を設定する省略可能な文字列パラメーター Descriptionを受け入れるようになりました。 次に例を示します。

[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{

次のような OpenAPI が生成されます。

        "responses": {
          "200": {
            "description": "The weather forecast for the next 5 days.",
            "content": {

コミュニティの貢献Sander ten Brinke

認証と承認

このセクションでは、認証と承認の新機能について説明します。

その他

このセクションでは、ASP.NET Core 10.0 のその他の新機能について説明します。

最上位レベルのステートメントを使用したアプリのテストのサポートの強化

.NET 10 では、最上位レベルのステートメント を使用するアプリテストするためのサポートが強化されました。 以前の開発者は、テスト プロジェクトが Program classを参照できるように、Program.cs ファイルに public partial class Program を手動で追加する必要がありました。 C# 9 の最上位レベルのステートメント機能によって、internal として宣言された Program class が生成されたため、public partial class Program が必要でした。

.NET 10 では、プログラマが明示的に宣言しなかった場合、ソース ジェネレーター を使用して public partial class Program 宣言が生成されます。 さらに、public partial class Program が明示的に宣言されたタイミングを検出し、削除するよう開発者に勧めるアナライザーが追加されました。

画像

この機能には、以下の PR が貢献しています。

RedirectHttpResult.IsLocalUrl を使用して URL がローカルかどうかを検出する

新しい RedirectHttpResult.IsLocalUrl(url) ヘルパー メソッドを使用して、URL がローカルかどうかを検出します。 次の条件に該当する場合、URL はローカルと見なされます。

"~/"仮想パスを使用する URL もローカルです。

IsLocalUrl は、オープン リダイレクト攻撃の防止を目的として、URL をリダイレクト前に検証するために役立ちます。

if (RedirectHttpResult.IsLocalUrl(url))
{
    return Results.LocalRedirect(url);
}

@martincostello さん、この貢献に感謝します!