Wersja zgodności dla ASP.NET Core MVC

Autor: Rick Anderson

Metoda SetCompatibilityVersion jest no-op dla aplikacji ASP.NET Core 3.0. Oznacza to, że wywołanie SetCompatibilityVersion z dowolną wartością CompatibilityVersion nie ma wpływu na aplikację.

Aby zobaczyć, jak SetCompatibilityVersion działa z aplikacjami platformy ASP.NET Core 2.x, wybierz wersję ASP.NET Core 2.2 tego artykułu.

Metoda SetCompatibilityVersion umożliwia aplikacji ASP.NET Core 2.x rezygnację z potencjalnie powodujących niezgodność zmian wprowadzonych w ASP.NET Core MVC 2.1 lub 2.2. Te potencjalnie powodujące niezgodność zmiany zachowania są zwykle w jaki sposób zachowuje się podsystem MVC i jak kod jest wywoływany przez środowisko uruchomieniowe. Decydując się, uzyskasz najnowsze zachowanie i długoterminowe zachowanie ASP.NET Core.

Poniższy kod ustawia tryb zgodności na ASP.NET Core 2.2:

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

Zalecamy przetestowanie aplikacji przy użyciu najnowszej wersji (CompatibilityVersion.Latest). Przewidujemy, że większość aplikacji nie będzie miała zmian zachowania powodującego niezgodność przy użyciu najnowszej wersji.

Aplikacje, które są SetCompatibilityVersion(CompatibilityVersion.Version_2_0) wywoływane, są chronione przed potencjalnie powodujących niezgodność zmian wprowadzonych w wersji MVC ASP.NET Core 2.1/2.2. Ta ochrona:

  • Nie dotyczy wszystkich zmian w wersji 2.1 i nowszych. Jest ona przeznaczona do potencjalnie powodujących niezgodność ASP.NET zmiany zachowania podstawowego środowiska uruchomieniowego w podsystemie MVC.
  • Nie rozszerza się na ASP.NET Core 3.0.

Domyślna zgodność aplikacji ASP.NET Core 2.1 i 2.2, które nie są wywoływane SetCompatibilityVersion , to zgodność z systemem 2.0. Oznacza to, że wywołanie nie jest takie samo jak wywołanie SetCompatibilityVersion metody SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Poniższy kod ustawia tryb zgodności na ASP.NET Core 2.2, z wyjątkiem następujących zachowań:

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

W przypadku aplikacji, które napotykają zmiany zachowania powodujące niezgodność, należy użyć odpowiednich przełączników zgodności:

  • Umożliwia korzystanie z najnowszej wersji i rezygnację z określonych zmian zachowania powodujących niezgodność.
  • Zapewnia czas na aktualizację aplikacji, dzięki czemu działa z najnowszymi zmianami.

Dokumentacja MvcOptions zawiera dobre wyjaśnienie, co się zmieniło i dlaczego zmiany są ulepszeniem dla większości użytkowników.

W przypadku ASP.NET Core 3.0 stare zachowania obsługiwane przez przełączniki zgodności zostały usunięte. Uważamy, że są to pozytywne zmiany, które przynoszą korzyści prawie wszystkim użytkownikom. Wprowadzając te zmiany w wersji 2.1 i 2.2, większość aplikacji może przynieść korzyści, podczas gdy inne mają czas na aktualizację.