Verze kompatibility pro ASP.NET Core MVC
Autor: Rick Anderson
Metoda SetCompatibilityVersion je no-op pro aplikace ASP.NET Core 3.0. To znamená, že volání SetCompatibilityVersion
s libovolnou CompatibilityVersion hodnotou nemá žádný vliv na aplikaci.
- Další podverze ASP.NET Core může poskytnout novou
CompatibilityVersion
hodnotu. CompatibilityVersion
hodnotyVersion_2_0
jsouVersion_2_2
označeny[Obsolete(...)]
.- Podívejte se na změny rozhraní API způsobující chybu v antiforgery, CORS, diagnostice, Mvc a směrování. Tento seznam obsahuje zásadní změny pro přepínače kompatibility.
Pokud chcete zjistit, jak SetCompatibilityVersion
funguje s aplikacemi ASP.NET Core 2.x, vyberte ASP.NET Core 2.2 verze tohoto článku.
Tato SetCompatibilityVersion metoda umožňuje aplikaci ASP.NET Core 2.x vyjádřit výslovný souhlas nebo vyjádřit nesouhlas s potenciálně zásadními změnami chování zavedeným v ASP.NET Core MVC 2.1 nebo 2.2. Tyto potenciálně rozbíjející změny chování jsou obecně ve způsobu chování subsystému MVC a způsobu, jakým modul runtime volá váš kód . Když se přihlásíte, získáte nejnovější chování a dlouhodobé chování ASP.NET Core.
Následující kód nastaví režim kompatibility na ASP.NET Core 2.2:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Doporučujeme otestovat aplikaci pomocí nejnovější verze (CompatibilityVersion.Latest
). Předpokládáme, že většina aplikací nebude mít zásadní změny chování pomocí nejnovější verze.
Aplikace, které volají SetCompatibilityVersion(CompatibilityVersion.Version_2_0)
, jsou chráněné před potenciálně zásadními změnami chování zavedených ve verzích MVC ASP.NET Core 2.1/2.2. Tato ochrana:
- Nevztahuje se na všechny změny verze 2.1 a novější, cílem je potenciálně rozbít změny chování modulu runtime ASP.NET Core v subsystému MVC.
- Nevztahuje se na ASP.NET Core 3.0.
Výchozí kompatibilita pro aplikace ASP.NET Core 2.1 a 2.2, které nevolajíSetCompatibilityVersion
, je 2.0 kompatibilní. To znamená, že volání SetCompatibilityVersion
není stejné jako volání SetCompatibilityVersion(CompatibilityVersion.Version_2_0)
.
Následující kód nastaví režim kompatibility na ASP.NET Core 2.2 s výjimkou následujících chování:
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;
});
}
U aplikací, u které dochází k zásadním změnám chování, pomocí příslušných přepínačů kompatibility:
- Umožňuje používat nejnovější verzi a vyjádřit výslovný nesouhlas s konkrétními změnami způsobujícím chování.
- Dává vám čas na aktualizaci aplikace, aby fungovala s nejnovějšími změnami.
MvcOptions Dokumentace obsahuje dobré vysvětlení toho, co se změnilo a proč se změny pro většinu uživatelů zlepšily.
U ASP.NET Core 3.0 se odebralo staré chování podporované přepínači kompatibility. Máme pocit, že jsou to pozitivní změny, které mají prospěch téměř všem uživatelům. Když tyto změny představíme ve verzi 2.1 a 2.2, může mít většina aplikací výhod, zatímco ostatní mají čas je aktualizovat.