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.
- Versi minor berikutnya dari ASP.NET Core dapat memberikan nilai baru
CompatibilityVersion
. CompatibilityVersion
nilaiVersion_2_0
melaluiVersion_2_2
ditandai[Obsolete(...)]
.- Lihat Melanggar perubahan API dalam Antiforgery, CORS, Diagnostik, Mvc, dan Perutean. Daftar ini mencakup perubahan yang melanggar untuk sakelar kompatibilitas.
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.
ASP.NET Core