Versione di compatibilità per ASP.NET Core MVCCompatibility version for ASP.NET Core MVC

Di Rick AndersonBy Rick Anderson

Il SetCompatibilityVersion metodo è un no-op per le app ASP.NET Core 3,0.The SetCompatibilityVersion method is a no-op for ASP.NET Core 3.0 apps. Ovvero, la chiamata SetCompatibilityVersion a con qualsiasi valore CompatibilityVersion di non ha alcun effetto sull'applicazione.That is, calling SetCompatibilityVersion with any value of CompatibilityVersion has no impact on the application.

Per vedere come SetCompatibilityVersion funziona con le app ASP.NET Core 2. x, selezionare la versione ASP.NET Core 2,2 di questo articolo.To see how SetCompatibilityVersion works with ASP.NET Core 2.x apps, select the ASP.NET Core 2.2 version of this article.

Il SetCompatibilityVersion metodo consente a un'app ASP.NET Core 2. x di acconsentire o rifiutare esplicitamente le modifiche del comportamento potenzialmente indesiderate introdotte in ASP.NET Core MVC 2,1 o 2,2.The SetCompatibilityVersion method allows an ASP.NET Core 2.x app to opt-in or opt-out of potentially breaking behavior changes introduced in ASP.NET Core MVC 2.1 or 2.2. Queste modifiche potenzialmente importanti del comportamento riguardano in genere il funzionamento del sottosistema MVC e la modalità con cui il codice dell'utente viene chiamato dal runtime.These potentially breaking behavior changes are generally in how the MVC subsystem behaves and how your code is called by the runtime. Se si acconsente esplicitamente, si ottiene il comportamento più recente e il comportamento a lungo termine di ASP.NET Core.By opting in, you get the latest behavior, and the long-term behavior of ASP.NET Core.

Il codice seguente imposta la modalità di compatibilità su ASP.NET Core 2.2:The following code sets the compatibility mode to ASP.NET Core 2.2:

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

È consigliabile testare l'app usando la versione più recente (CompatibilityVersion.Latest).We recommend you test your app using the latest version (CompatibilityVersion.Latest). Microsoft prevede che la maggior parte delle app non riscontrerà modifiche importanti del comportamento quando viene usata la versione più recente.We anticipate that most apps won't have breaking behavior changes using the latest version.

Le app che SetCompatibilityVersion(CompatibilityVersion.Version_2_0) chiamano sono protette da potenziali modifiche del comportamento introdotte nelle versioni ASP.NET Core 2.1/2.2 MVC.Apps that call SetCompatibilityVersion(CompatibilityVersion.Version_2_0) are protected from potentially breaking behavior changes introduced in the ASP.NET Core 2.1/2.2 MVC versions. La protezione:This protection:

  • Non è valida per tutte le modifiche 2.1 e successive, ma è destinata alle modifiche potenzialmente importanti del comportamento del runtime ASP.NET Core nel sottosistema MVC.Does not apply to all 2.1 and later changes, it's targeted to potentially breaking ASP.NET Core runtime behavior changes in the MVC subsystem.
  • Non si estende a ASP.NET Core 3,0.Does not extend to ASP.NET Core 3.0.

La compatibilità predefinita per le app ASP.NET Core 2,1 e 2,2 che non chiamano SetCompatibilityVersion è la compatibilità 2,0.The default compatibility for ASP.NET Core 2.1 and 2.2 apps that do not call SetCompatibilityVersion is 2.0 compatibility. In altri termini il fatto di non chiamare SetCompatibilityVersion equivale a chiamare SetCompatibilityVersion(CompatibilityVersion.Version_2_0).That is, not calling SetCompatibilityVersion is the same as calling SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Il codice seguente imposta la modalità di compatibilità su ASP.NET Core 2.2, con l'eccezione dei comportamenti seguenti:The following code sets the compatibility mode to ASP.NET Core 2.2, except for the following behaviors:

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 potenzialmente importanti del comportamento, l'uso delle opzioni di compatibilità appropriate:For apps that encounter breaking behavior changes, using the appropriate compatibility switches:

  • Consente di usare la versione più recente e di rifiutare esplicitamente modifiche importanti del comportamento specifiche.Allows you to use the latest release and opt out of specific breaking behavior changes.
  • Garantisce il tempo necessario per l'aggiornamento dell'app, che in tal modo potrà funzionare con le modifiche più recenti.Gives you time to update your app so it works with the latest changes.

La documentazione di MvcOptions offre una spiegazione chiara delle modifiche e dei motivi per cui queste rappresentano un miglioramento per la maggior parte degli utenti.The MvcOptions documentation has a good explanation of what changed and why the changes are an improvement for most users.

Con ASP.NET Core 3,0, i comportamenti precedenti supportati dalle opzioni di compatibilità sono stati rimossi.With ASP.NET Core 3.0, old behaviors supported by compatibility switches have been removed. Queste modifiche positive andranno a vantaggio della maggior parte degli utenti.We feel these are positive changes benefitting nearly all users. Introducendo queste modifiche nei 2,1 e 2,2, la maggior parte delle app può trarre vantaggio, mentre altre hanno tempo per l'aggiornamento.By introducing these changes in 2.1 and 2.2, most apps can benefit, while others have time to update.