Bagikan melalui


Versi kompatibilitas untuk ASP.NET Core MVC

Oleh Rick Anderson

Metode SetCompatibilityVersion ini adalah no-op untuk aplikasi ASP.NET Core 3.0. Artinya, memanggil SetCompatibilityVersion dengan nilai CompatibilityVersion apa pun tidak berdampak pada aplikasi.

Untuk melihat cara SetCompatibilityVersion kerja aplikasi ASP.NET Core 2.x, pilih versi ASP.NET Core 2.2 dari artikel ini.

Metode ini SetCompatibilityVersion memungkinkan aplikasi ASP.NET Core 2.x untuk ikut serta atau menolak perubahan perilaku yang berpotensi melanggar yang diperkenalkan dalam ASP.NET Core MVC 2.1 atau 2.2. Perubahan perilaku yang berpotensi melanggar ini umumnya dalam bagaimana subsistem MVC berperilaku dan bagaimana kode Anda dipanggil oleh runtime. Dengan ikut serta, Anda mendapatkan perilaku terbaru, dan perilaku jangka panjang ASP.NET Core.

Kode berikut mengatur mode kompatibilitas ke ASP.NET Core 2.2:

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

Kami sarankan Anda menguji aplikasi menggunakan versi terbaru (CompatibilityVersion.Latest). Kami mengantisipasi bahwa sebagian besar aplikasi tidak akan memiliki perubahan perilaku yang melanggar menggunakan versi terbaru.

Aplikasi yang memanggil SetCompatibilityVersion(CompatibilityVersion.Version_2_0) dilindungi dari perubahan perilaku yang berpotensi melanggar yang diperkenalkan dalam versi MVC ASP.NET Core 2.1/2.2. Perlindungan ini:

  • Tidak berlaku untuk semua perubahan 2.1 dan yang lebih baru, ditargetkan untuk berpotensi melanggar perubahan perilaku runtime ASP.NET Core di subsistem MVC.
  • Tidak meluas ke ASP.NET Core 3.0.

Kompatibilitas default untuk aplikasi ASP.NET Core 2.1 dan 2.2 yang tidak memanggil SetCompatibilityVersion adalah kompatibilitas 2.0. Artinya, tidak memanggil SetCompatibilityVersion sama dengan memanggil SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Kode berikut mengatur mode kompatibilitas ke ASP.NET Core 2.2, kecuali untuk perilaku berikut:

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;
        });
}

Untuk aplikasi yang mengalami perubahan perilaku yang melanggar, menggunakan sakelar kompatibilitas yang sesuai:

  • Memungkinkan Anda menggunakan rilis terbaru dan menolak perubahan perilaku melanggar tertentu.
  • Memberi Anda waktu untuk memperbarui aplikasi sehingga berfungsi dengan perubahan terbaru.

Dokumentasi MvcOptions ini memiliki penjelasan yang baik tentang apa yang berubah dan mengapa perubahan tersebut merupakan peningkatan bagi sebagian besar pengguna.

Dengan ASP.NET Core 3.0, perilaku lama yang didukung oleh sakelar kompatibilitas telah dihapus. Kami merasa ini adalah perubahan positif yang menguntungkan hampir semua pengguna. Dengan memperkenalkan perubahan ini di 2.1 dan 2.2, sebagian besar aplikasi dapat memperoleh manfaat, sementara yang lain memiliki waktu untuk memperbarui.