Condividi tramite


Versione di compatibilità per ASP.NET Core MVC

Di Rick Anderson

Il SetCompatibilityVersion metodo è un no-op per le app ASP.NET Core 3.0. Ovvero, la chiamata SetCompatibilityVersion con qualsiasi valore di CompatibilityVersion non ha alcun impatto sull'applicazione.

Per informazioni SetCompatibilityVersion sul funzionamento delle app ASP.NET Core 2.x, selezionare la versione ASP.NET Core 2.2 di questo articolo.

Il SetCompatibilityVersion metodo consente a un'app ASP.NET Core 2.x di acconsentire esplicitamente o rifiutare esplicitamente le modifiche di comportamento potenzialmente di rilievo introdotte in ASP.NET Core MVC 2.1 o 2.2. Queste modifiche di comportamento potenzialmente significative riguardano in genere il comportamento del sottosistema MVC e il modo in cui il tuo codice viene chiamato dal runtime. Se si sceglie esplicitamente, si ottiene il comportamento più recente e il comportamento a lungo termine di ASP.NET Core.

Il codice seguente imposta la modalità di compatibilità su ASP.NET Core 2.2:

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

Ti consigliamo di testare l'app usando la versione più recente (CompatibilityVersion.Latest). Prevediamo che la maggior parte delle app non avrà modifiche di comportamento di rilievo usando la versione più recente.

Le app che chiamano SetCompatibilityVersion(CompatibilityVersion.Version_2_0) sono protette da modifiche di comportamento potenzialmente dirompenti introdotte nelle versioni MVC di ASP.NET Core 2.1/2.2. Questa protezione:

  • Non si applica a tutte le modifiche della versione 2.1 o successive, ma prende di mira le modifiche che potrebbero interrompere il comportamento del runtime di ASP.NET Core nel sottosistema MVC.
  • Non si estende a ASP.NET Core 3.0.

La compatibilità predefinita per le app ASP.NET Core 2.1 e 2.2 che non chiamanoSetCompatibilityVersion è compatibilità 2.0. Ovvero, non chiamare SetCompatibilityVersion è lo stesso che chiamare SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Il codice seguente imposta la modalità di compatibilità su ASP.NET Core 2.2, ad eccezione dei comportamenti seguenti:

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

Per le app che riscontrano modifiche significative del comportamento, devono utilizzare le opzioni di compatibilità appropriate:

  • Consente di usare la versione più recente e rifiutare esplicitamente modifiche specifiche del comportamento di interruzione.
  • Consente di aggiornare l'app in modo che funzioni con le modifiche più recenti.

La MvcOptions documentazione contiene una buona spiegazione delle modifiche apportate e dei motivi per cui le modifiche sono un miglioramento per la maggior parte degli utenti.

Con ASP.NET Core 3.0, i comportamenti precedenti supportati dalle opzioni di compatibilità sono stati rimossi. Questi sono cambiamenti positivi che traggono vantaggio quasi tutti gli utenti. Introducendo queste modifiche nella versione 2.1 e 2.2, la maggior parte delle app può trarre vantaggio, mentre altre hanno tempo per l'aggiornamento.