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.
Al devolver un T
en una acción del controlador MVC/API que declara el tipo de valor devuelto como ActionResult<TValue>, el ObjectResult.StatusCode siempre se establece en 200, excepto cuando el T
es un ProblemDetails.
Este cambio puede provocar un comportamiento inesperado en algunos escenarios en los que se establece manualmente el código de estado, ya que anteriormente ObjectResult.StatusCode era null
. Además, un filtro de acción podría verse afectado por este cambio si espera un valor NULL en lugar de 200.
Versión introducida
ASP.NET Core 6.0
Comportamiento anterior
Anteriormente, la acción de un controlador que devuelve T
y establece Response.StatusCode
genera manualmente el código de estado de respuesta especificado. Por ejemplo, la acción del controlador siguiente generará una 202 Accepted
respuesta.
// Generates a 202 Accepted response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Nuevo comportamiento
Ahora, la misma acción del controlador que devuelve T
y establece manualmente Response.StatusCode
siempre genera una 200 OK
respuesta.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Tipo de cambio disruptivo
Este cambio puede afectar a la compatibilidad de orígenes.
Motivo del cambio
La devolución de un código de estado de 200 OK
se documenta desde ASP.NET Core 3.1. Sin embargo, se mantiene StatusCode como null
y, finalmente, genera una 200 OK
respuesta solo porque es el valor predeterminado. Dado que el comportamiento interno predeterminado podría cambiar, decidimos evitar confiar en el valor predeterminado y establecer StatusCode explícitamente en el esperado 200 OK
.
Acción recomendada
Si el código establece el código de estado manualmente y se interrumpe con este cambio, deberá cambiar la acción del controlador. Por ejemplo, el siguiente fragmento de código establece un código de estado de 202 y se interrumpe con este cambio.
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Para conservar el comportamiento deseado de un código de estado 202, los fragmentos de código siguientes muestran algunas opciones.
public ActionResult<Model> Get()
{
return Accepted(new Model());
}
// or
public ActionResult<Model> Get()
{
return StatusCode(StatusCodes.Status202Accepted, new Model());
}
// or
public Model Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Las APIs afectadas
- Acciones del controlador de MVC/API
Consulte también
- Tipo de ActionResult<T>