Version de compatibilité pour ASP.NET Core MVCCompatibility version for ASP.NET Core MVC

Par Rick AndersonBy Rick Anderson

La SetCompatibilityVersion méthode est une absence d’opération pour les applications ASP.net Core 3,0.The SetCompatibilityVersion method is a no-op for ASP.NET Core 3.0 apps. Autrement dit, l' SetCompatibilityVersion appel avec n’importe CompatibilityVersion quelle valeur n’a aucun impact sur l’application.That is, calling SetCompatibilityVersion with any value of CompatibilityVersion has no impact on the application.

Pour voir comment SetCompatibilityVersion fonctionne avec les applications ASP.net Core 2. x, sélectionnez la version ASP.net Core 2,2 de cet article.To see how SetCompatibilityVersion works with ASP.NET Core 2.x apps, select the ASP.NET Core 2.2 version of this article.

La SetCompatibilityVersion méthode permet à un ASP.net Core application 2. x d’accepter ou de refuser les modifications de comportement potentiellement en rupture introduites dans ASP.net Core MVC 2,1 ou 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. Ces changements de comportement potentiellement cassants concernent en général la façon dont le sous-système MVC se comporte et la façon dont votre code est appelé par le runtime.These potentially breaking behavior changes are generally in how the MVC subsystem behaves and how your code is called by the runtime. En acceptant, vous obtenez le comportement le plus récent et le comportement à long terme d’ASP.NET Core.By opting in, you get the latest behavior, and the long-term behavior of ASP.NET Core.

Le code suivant définit le mode de compatibilité sur 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);
}

Nous vous recommandons de tester votre application avec la version la plus récente (CompatibilityVersion.Latest).We recommend you test your app using the latest version (CompatibilityVersion.Latest). Nous pensons que la plupart des applications ne connaîtront pas de changements de comportement cassants avec la version la plus récente.We anticipate that most apps won't have breaking behavior changes using the latest version.

Les applications qui SetCompatibilityVersion(CompatibilityVersion.Version_2_0) appellent sont protégées contre les changements de comportement potentiellement inaltérables introduits dans les versions de 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. Cette protection :This protection:

  • Ne s’applique pas à tous les changements de 2.1 et ultérieur. Elle est destinée aux changements de comportement potentiellement cassants du runtime ASP.NET Core dans le sous-système 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.
  • Ne s’étend pas à ASP.NET Core 3,0.Does not extend to ASP.NET Core 3.0.

La compatibilité par défaut pour les applications ASP.net Core 2,1 et 2,2 qui n' SetCompatibilityVersion appellent pas est 2,0.The default compatibility for ASP.NET Core 2.1 and 2.2 apps that do not call SetCompatibilityVersion is 2.0 compatibility. Autrement dit, ne pas appeler SetCompatibilityVersion revient à appeler SetCompatibilityVersion(CompatibilityVersion.Version_2_0).That is, not calling SetCompatibilityVersion is the same as calling SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Le code suivant définit le mode de compatibilité sur ASP.NET Core 2.2, sauf pour les comportements suivants :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;
        });
}

Pour les applications qui rencontrent des changements de comportement cassants, l’utilisation des commutateurs de compatibilité appropriés :For apps that encounter breaking behavior changes, using the appropriate compatibility switches:

  • Vous permet d’utiliser la dernière version et de refuser des changements de comportement cassants spécifiques.Allows you to use the latest release and opt out of specific breaking behavior changes.
  • Vous laisse le temps de mettre à jour votre application pour qu’elle fonctionne avec les derniers changements.Gives you time to update your app so it works with the latest changes.

La documentation MvcOptions explique clairement ce qui a changé et pourquoi ces changements représentent une amélioration pour la plupart des utilisateurs.The MvcOptions documentation has a good explanation of what changed and why the changes are an improvement for most users.

Avec ASP.NET Core 3,0, les anciens comportements pris en charge par les commutateurs de compatibilité ont été supprimés.With ASP.NET Core 3.0, old behaviors supported by compatibility switches have been removed. Nous pensons que ce sont des changements positifs, qui vont bénéficier à presque tous les utilisateurs.We feel these are positive changes benefitting nearly all users. En introduisant ces modifications dans 2,1 et 2,2, la plupart des applications peuvent bénéficier de la mise à jour, tandis que d’autres ont du temps.By introducing these changes in 2.1 and 2.2, most apps can benefit, while others have time to update.