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.

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.