ارتقاء به ASP.NET Core 2.1 - معرفی درجهی سازگاری فریم ورک
پس از نصب یک SDK جدید، بهترین روش یافتن تغییرات انجام شده، ایجاد یک پوشهی خالی جدید، باز کردن خط فرمان در این پوشه و سپس صدور دستور dotnet new mvc است. به این ترتیب بدون داشتن هیچ نوع IDE خاصی میتوانید یک پروژهی جدید مبتنی بر آن SDK را ایجاد کنید.
در قالب پیشفرض نگارش 2.1، سطر فعالسازی Mvc به صورت زیر تغییر کردهاست:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
در اینجا CompatibilityVersion یک چنین تعریفی را دارد:
public enum CompatibilityVersion
{
Version_2_0 = 0,
Version_2_1 = 1,
Latest = int.MaxValue
}
برای مثال تنظیم آن به Version_2_0، صرفنظر از نگارش جاری Mvc مورد استفاده، رفتار نگارش 2.0 را برای برنامه تنظیم میکند که البته هدف اصلی آنها در حقیقت چنین چیزی است:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1) // Give me all of the 2.1 behaviors
.AddMvcOptions(options =>
{
options.AllowCombiningAuthorizeFilters = false; // don't combine authorize filters (keep 2.0 behavior)
options.AllowEmptyInputInBodyModelBinding = false; // shouldn't treat empty input as valid.
});
و فلسفهی آن نیز به این صورت است: چگونه یک فریمورک را بهبود ببخشیم، بدون اینکه ارتقاء به نگارشهای جدید را سختتر کنیم؟
برای مثال در نگارش 2.1، اگر بدنهی درخواست رسیده خالی باشد، خطایی را به ModelState اضافه میکند که پیشتر اینگونه نبودهاست و یا ترکیب سیاستهای امنیتی پیش از نگارش 2.1، آنطور که تصور میشده، کار نمیکردهاست و این باگ اکنون اصلاح شدهاست. اگر پس از به روز رسانی به نگارش 2.1، این دو تغییر، برنامهی شما را به هم میریزند، یا میتوانید CompatibilityVersion را به Version_2_0 تعیین کنید (لغو کلی تغییرات رفتاری نگارش 2.1) و یا Version_2_1 را انتخاب کنید و توسط متد AddMvcOptions، گزینههای مختلف این تغییرات انجام شده را به دلخواه انتخاب کنید.
نکتهی مهم: این رفتارها تا ابد نگهداری نخواهند شد. یعنی با ارائهی نگارش 3.0 و انتخاب آن، دیگر دسترسی به رفتارهای قدیمی قابل انتخاب برای نگارش 2.1 نخواهید داشت. به همین جهت در این بین، فرصت بررسی، انطباق و به روز رسانی برنامهی خود را خواهید داشت.