次の方法で共有


ASP.NET Core MVC の互換性バージョン

作成者: Rick Anderson

SetCompatibilityVersion メソッドは、ASP.NET Core 3.0 アプリの no-op です。 つまり、SetCompatibilityVersionの任意の値でCompatibilityVersionを呼び出しても、アプリケーションには影響しません。

  • ASP.NET Core の次のマイナー バージョンでは、新しい CompatibilityVersion 値が提供される場合があります。
  • CompatibilityVersionVersion_2_0からVersion_2_2までが[Obsolete(...)]マークされています。
  • 偽造防止、CORS、診断、Mvc、ルーティングの API の破壊的変更に関するセクションを参照してください。 この一覧には、互換性スイッチの破壊的変更が含まれています。

ASP.NET Core 2.x アプリでの SetCompatibilityVersion のしくみを確認するには、 この記事の ASP.NET Core 2.2 バージョンを選択します。

SetCompatibilityVersion メソッドを使用すると、ASP.NET Core 2.x アプリは、ASP.NET Core MVC 2.1 または 2.2 で導入された破壊的動作の変更をオプトインまたはオプトアウトできます。 これらの破壊的動作の変更は、通常、MVC サブシステムの動作と、ランタイムによって コード がどのように呼び出されるかにあります。 オプトインすると、最新の動作と、ASP.NET Core の長期的な動作が得られます。

次のコードでは、互換モードを ASP.NET Core 2.2 に設定します。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

最新バージョン (CompatibilityVersion.Latest) を使用してアプリをテストすることをお勧めします。 ほとんどのアプリでは、最新バージョンを使用して破壊的な動作の変更が行われないことが予想されます。

SetCompatibilityVersion(CompatibilityVersion.Version_2_0)を呼び出すアプリは、ASP.NET Core 2.1/2.2 MVC バージョンで導入された破壊的な動作変更から保護されます。 この保護:

  • すべての 2.1 以降の変更に適用されるわけではなく、MVC サブシステム内で ASP.NET Core ランタイムの動作に影響を与える可能性のある変更に焦点を当てています。
  • ASP.NET Core 3.0 には拡張されません。

ASP.NET Core 2.1 および 2.2 アプリが を呼び出SetCompatibilityVersion場合の既定の互換性は、2.0 互換性です。 つまり、 SetCompatibilityVersion を呼び出さないのは、 SetCompatibilityVersion(CompatibilityVersion.Version_2_0)の呼び出しと同じです。

次のコードでは、次の動作を除き、互換モード ASP.NET Core 2.2 に設定します。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        // Include the 2.2 behaviors
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
        // Except for the following.
        .AddMvcOptions(options =>
        {
            // Don't combine authorize filters (keep 2.0 behavior).
            options.AllowCombiningAuthorizeFilters = false;
            // All exceptions thrown by an IInputFormatter are treated
            // as model state errors (keep 2.0 behavior).
            options.InputFormatterExceptionPolicy =
                InputFormatterExceptionPolicy.AllExceptions;
        });
}

動作の重大な変更が発生したアプリの場合は、適切な互換性スイッチを使用します。

  • 最新のリリースを使用して、特定の破壊的動作の変更をオプトアウトできます。
  • 最新の変更で動作するようにアプリを更新する時間を提供します。

MvcOptionsドキュメントには、変更された内容と、変更がほとんどのユーザーにとって改善された理由についての適切な説明が記載されています。

ASP.NET Core 3.0 では、互換性スイッチでサポートされていた古い動作が削除されました。 これらは、ほぼすべてのユーザーにとって有益な肯定的な変化であると感じています。 これらの変更を 2.1 と 2.2 で導入することで、ほとんどのアプリでメリットを得ることができますが、他のアプリは更新する時間があります。