Bagikan melalui


Versi kompatibilitas untuk ASP.NET Core MVC

Oleh Rick Anderson

Metode SetCompatibilityVersion adalah sebuah 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 SetCompatibilityVersion memungkinkan aplikasi ASP.NET Core 2.x untuk memilih ikut serta atau menolak perubahan perilaku yang berpotensi mengganggu, 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 mengalami perubahan perilaku yang mengganggu dengan versi terbaru.

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

  • Tidak diterapkan untuk semua perubahan 2.1 atau yang lebih baru, melainkan ditargetkan untuk perubahan yang berpotensi merusak 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;
        });
}

Bagi aplikasi yang mengalami perubahan perilaku yang mengganggu, gunakan 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.