Partager via


Version de compatibilité pour ASP.NET Core MVC

Par Rick Anderson

La SetCompatibilityVersion méthode est une no-op pour les applications ASP.NET Core 3.0. Autrement dit, l’appel de SetCompatibilityVersion avec n’importe quelle valeur de CompatibilityVersion n’a aucun impact sur l’application.

Pour savoir comment SetCompatibilityVersion fonctionne avec les applications ASP.NET Core 2.x, sélectionnez la version ASP.NET Core 2.2 de cet article.

La SetCompatibilityVersion méthode permet à une application ASP.NET Core 2.x de refuser ou d’annuler les changements de comportement potentiellement cassants introduits dans ASP.NET Core MVC 2.1 ou 2.2. Ces changements de comportement potentiellement cassants sont généralement dans le comportement du sous-système MVC et la façon dont votre code est appelé par le runtime. En optant, vous obtenez le dernier comportement et le comportement à long terme de ASP.NET Core.

Le code suivant définit le mode de compatibilité sur ASP.NET Core 2.2 :

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

Nous vous recommandons de tester votre application à l’aide de la dernière version (CompatibilityVersion.Latest). Nous prévoyons que la plupart des applications n'auront pas de changements de comportement perturbateurs avec la dernière version.

Les applications qui appellent SetCompatibilityVersion(CompatibilityVersion.Version_2_0) sont protégées contre les changements de comportement susceptibles de provoquer des dysfonctionnements, introduits dans les versions ASP.NET Core 2.1/2.2 MVC. Cette protection :

  • Ne s'applique pas à toutes les modifications 2.1 ou ultérieures, il est ciblé sur les changements de comportement potentiellement perturbateurs du runtime ASP.NET Core dans le sous-système MVC.
  • Ne s’étend pas à ASP.NET Core 3.0.

La compatibilité par défaut pour les applications ASP.NET Core 2.1 et 2.2 qui n’appellent SetCompatibilityVersion est la compatibilité 2.0. Autrement dit, ne pas appeler SetCompatibilityVersion est la même chose que appeler SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Le code suivant définit le mode de compatibilité sur ASP.NET Core 2.2, à l’exception des comportements suivants :

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 modifications importantes du comportement, en utilisant les commutateurs de compatibilité appropriés :

  • Vous permet d’utiliser la dernière version et d’éviter certains changements de comportement perturbateurs spécifiques.
  • Vous donne le temps de mettre à jour votre application afin qu’elle fonctionne avec les dernières modifications.

La MvcOptions documentation présente une bonne explication de ce qui a changé et de la raison pour laquelle les modifications sont une amélioration pour la plupart des utilisateurs.

Avec ASP.NET Core 3.0, les anciens comportements pris en charge par les commutateurs de compatibilité ont été supprimés. Nous pensons qu’il s’agit de changements positifs qui profitent à presque tous les utilisateurs. En introduisant ces modifications dans la version 2.1 et 2.2, la plupart des applications peuvent bénéficier, tandis que d’autres ont le temps de mettre à jour.