Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Автор: Рик Андерсон (Rick Anderson)
Метод SetCompatibilityVersion — это no-op для приложений ASP.NET Core 3.0. То есть вызов SetCompatibilityVersion
с любым значением CompatibilityVersion не влияет на приложение.
- Следующая дополнительная версия ASP.NET Core может предоставить новое
CompatibilityVersion
значение. -
CompatibilityVersion
значенияVersion_2_0
поVersion_2_2
помечаются[Obsolete(...)]
. - См. критические изменения API в Antiforgery, CORS, диагностике, MVC и маршрутизации. Этот список включает изменения, нарушающие совместимость, для переключателей совместимости.
Чтобы узнать, как SetCompatibilityVersion
работает с приложениями ASP.NET Core 2.x, выберите версию 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)
, защищены от потенциальных изменений в поведении, которые могут нарушить работу, представленных в версиях MVC ASP.NET Core 2.1/2.2. Эта защита:
- Не касается всех изменений версии 2.1 или более поздних; затрагивает потенциально сбойные изменения в поведении среды выполнения ASP.NET Core в подсистеме MVC.
- Не распространяется на 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, большинство приложений могут воспользоваться преимуществами, в то время как у других пользователей есть время на обновление.
ASP.NET Core