Dela via


Kompatibilitetsversion för ASP.NET Core MVC

Av Rick Anderson

Metoden SetCompatibilityVersion är en no-op för ASP.NET Core 3.0-appar. Det vill: att anropa SetCompatibilityVersion med något värde för CompatibilityVersion har ingen inverkan på programmet.

Om du vill se hur SetCompatibilityVersion det fungerar med ASP.NET Core 2.x-appar väljer du ASP.NET Core 2.2-versionen av den här artikeln.

Med SetCompatibilityVersion-metoden kan en ASP.NET Core 2.x-app välja att aktivera eller avaktivera potentiellt icke-bakåtkompatibla beteendeförändringar som introduceras i ASP.NET Core MVC 2.1 eller 2.2. Dessa beteendeändringar som kan påverka befintlig funktionalitet negativt är vanligtvis i hur MVC-undersystemet beter sig och hur din kod anropas av programmet vid körning. Genom att välja får du det senaste beteendet och det långsiktiga beteendet för ASP.NET Core.

Följande kod anger kompatibilitetsläget till ASP.NET Core 2.2:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

Vi rekommenderar att du testar din app med den senaste versionen (CompatibilityVersion.Latest). Vi räknar med att de flesta appar inte har icke-bakåtkompatibla beteendeändringar med den senaste versionen.

Applikationer som anropar SetCompatibilityVersion(CompatibilityVersion.Version_2_0) skyddas från potentiellt icke-kompatibla beteendeändringar i ASP.NET Core 2.1/2.2 MVC-versionerna. Det här skyddet:

  • Gäller inte för alla ändringar från och med version 2.1, utan riktar sig mot potentiellt förändrade körningsbeteenden i ASP.NET Core MVC-undersystemet.
  • Utökar inte till ASP.NET Core 3.0.

Standardkompatibiliteten för ASP.NET Core 2.1- och 2.2-appar som inte anropar SetCompatibilityVersion är 2.0-kompatibilitet. Det vill: att inte anropa SetCompatibilityVersion är samma sak som att anropa SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Följande kod anger kompatibilitetsläget till ASP.NET Core 2.2, förutom följande beteenden:

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;
        });
}

För appar som stöter på icke-bakåtkompatibla beteendeändringar använder du lämpliga kompatibilitetsväxlar:

  • Gör att du kan använda den senaste versionen och välja bort specifika icke-bakåtkompatibla beteendeändringar.
  • Ger dig tid att uppdatera din app så att den fungerar med de senaste ändringarna.

Dokumentationen MvcOptions innehåller en bra förklaring av vad som har ändrats och varför ändringarna är en förbättring för de flesta användare.

Med ASP.NET Core 3.0 har gamla beteenden som stöds av kompatibilitetsväxlar tagits bort. Vi anser att detta är positiva förändringar som gynnar nästan alla användare. Genom att introducera dessa ändringar i 2.1 och 2.2 kan de flesta appar dra nytta av det, medan andra har tid att uppdatera.