Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao retornar um T em uma ação de controlador MVC/API que declara o tipo de retorno como ActionResult<TValue>, o ObjectResult.StatusCode é sempre definido como 200, exceto quando o T é um ProblemDetails.
Essa alteração pode causar um comportamento inesperado em alguns cenários em que você define o código de status manualmente, já que anteriormente era ObjectResult.StatusCodenull. Além disso, um filtro de ação poderá ser afetado por essa alteração se ele espera um valor nulo em vez de 200.
Versão introduzida
ASP.NET Core 6.0
Comportamento anterior
Anteriormente, a ação de um controlador que retorna T e define Response.StatusCode gerava manualmente o código de status de resposta especificado. Por exemplo, a ação do controlador a seguir gerará uma 202 Accepted resposta.
// Generates a 202 Accepted response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Novo comportamento
Agora, a ação do mesmo controlador que retorna T e define Response.StatusCode manualmente sempre gera uma 200 OK resposta.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade da origem.
Motivo da alteração
O retorno de um código de status 200 OK está documentado desde o ASP.NET Core 3.1. No entanto, ele mantém StatusCode como null e, eventualmente, gera uma 200 OK resposta apenas porque é o padrão. Como o comportamento interno padrão pode mudar, decidimos evitar depender do padrão e definir StatusCode explicitamente como o esperado 200 OK.
Ação recomendada
Se o código definir o código de status manualmente e for interrompido por essa alteração, você precisará alterar a ação do controlador. Por exemplo, o trecho de código a seguir define um código de status de 202 e é afetado por essa alteração.
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Para manter o comportamento desejado de um código de status 202, os snippets de código a seguir mostram algumas opções.
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();
}
APIs afetadas
- Ações do controlador de MVC/API
Consulte também
- Tipo ActionResult<T>