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ę.
- Następna wersja pomocnicza ASP.NET Core może stanowić nową
CompatibilityVersion
wartość. CompatibilityVersion
wartościVersion_2_0
za pośrednictwemVersion_2_2
są oznaczone jako[Obsolete(...)]
.- Zobacz Istotne zmiany interfejsu API w obszarze Antiforgery, CORS, Diagnostics, Mvc i Routing. Ta lista zawiera zmiany powodujące niezgodność dla przełączników zgodności.
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ę.