Совместимая версия для ASP.NET Core MVC
Автор: Рик Андерсон (Rick Anderson)
Метод SetCompatibilityVersion не предназначен для приложений ASP.NET Core 3.0. То есть вызов SetCompatibilityVersion
с любым значением CompatibilityVersion не влияет на приложение.
- Следующая дополнительная версия ASP.NET Core может предоставить новое значение
CompatibilityVersion
. - Значения
CompatibilityVersion
отVersion_2_0
доVersion_2_2
помечаются как[Obsolete(...)]
. - См. статью Breaking API changes in Antiforgery, CORS, Diagnostics, Mvc, and Routing (Критические изменения API в областях борьбы с фальсификацией, 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