Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Por Rick Anderson
El SetCompatibilityVersion método es un no-op para aplicaciones de ASP.NET Core 3.0. Es decir, llamar a SetCompatibilityVersion
con cualquier valor de CompatibilityVersion no tiene ningún impacto en la aplicación.
- La siguiente versión secundaria de ASP.NET Core puede proporcionar un nuevo
CompatibilityVersion
valor. -
CompatibilityVersion
los valoresVersion_2_0
a travésVersion_2_2
están marcados como[Obsolete(...)]
. - Consulte Cambios importantes de API en Antiforgery, CORS, Diagnostics, Mvc y Routing. En esta lista se incluyen cambios drásticos para las opciones de compatibilidad.
Para ver cómo SetCompatibilityVersion
funciona con las aplicaciones de ASP.NET Core 2.x, seleccione la versión ASP.NET Core 2.2 de este artículo.
El SetCompatibilityVersion método permite que una aplicación de ASP.NET Core 2.x opte o no participe en los cambios de comportamiento potencialmente importantes introducidos en ASP.NET Core MVC 2.1 o 2.2. Estos cambios de comportamiento potencialmente disruptivos suelen afectar cómo se comporta el subsistema MVC y cómo el tiempo de ejecución llama a tu código. Al participar, obtendrá el comportamiento más reciente y el comportamiento a largo plazo de ASP.NET Core.
El código siguiente establece el modo de compatibilidad en ASP.NET Core 2.2:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Se recomienda probar la aplicación con la versión más reciente (CompatibilityVersion.Latest
). Se prevé que la mayoría de las aplicaciones no tendrán cambios importantes en el comportamiento mediante la versión más reciente.
Las aplicaciones que llaman SetCompatibilityVersion(CompatibilityVersion.Version_2_0)
están protegidas contra cambios de comportamiento que podrían ser disruptivos introducidos en las versiones de MVC de ASP.NET Core 2.1/2.2. Esta protección:
- No se aplica a todos los cambios de la versión 2.1 o posteriores; se dirige específicamente a abordar cambios potencialmente disruptivos en el comportamiento del tiempo de ejecución de ASP.NET Core dentro del subsistema MVC.
- No se extiende a ASP.NET Core 3.0.
La compatibilidad predeterminada para las aplicaciones de ASP.NET Core 2.1 y 2.2 que no llaman SetCompatibilityVersion
es la compatibilidad 2.0. Es decir, no llamar a SetCompatibilityVersion
es lo mismo que llamar a SetCompatibilityVersion(CompatibilityVersion.Version_2_0)
.
El código siguiente establece el modo de compatibilidad en ASP.NET Core 2.2, excepto los comportamientos siguientes:
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;
});
}
En el caso de las aplicaciones que experimentan cambios importantes en el comportamiento, utilice los modificadores de compatibilidad adecuados.
- Permite utilizar la última versión y elegir no aceptar cambios específicos en el comportamiento que puedan alterar su funcionamiento.
- Proporciona tiempo para actualizar la aplicación para que funcione con los cambios más recientes.
La MvcOptions documentación tiene una buena explicación de lo que cambió y por qué los cambios son una mejora para la mayoría de los usuarios.
Con ASP.NET Core 3.0, se han eliminado los comportamientos antiguos admitidos por los conmutadores de compatibilidad. Sentimos que estos son cambios positivos que benefician a casi todos los usuarios. Al introducir estos cambios en la versión 2.1 y 2.2, la mayoría de las aplicaciones pueden beneficiarse, mientras que otras tienen tiempo de actualización.