Sdílet prostřednictvím


Kompatibilní verze 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 verzi tohoto článku ASP.NET Core 2.2.

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ě narušující změny chování se obecně týkají toho, jak se subsystém MVC chová a jak 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 nebo novější, ale zaměřuje se na potenciální změny chování modulu runtime, které by mohly ovlivnit 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 kompatibilita. To znamená, že nevolání SetCompatibilityVersion je 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ší vydání a vyjádřit výslovný nesouhlas s konkrétními změnami, které narušují očekávané fungová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.