ActionResult<T> задает для StatusCode значение 200
При возвращении T
в действие контроллера MVC/API, которое объявляет тип возвращаемого значения ActionResult<TValue>как, ObjectResult.StatusCode всегда задано значение 200, за исключением случаев, когда T
это ProblemDetailsзначение.
Это изменение может привести к непредвиденному поведению в некоторых сценариях, когда вы вручную задали код состояния, так как ранее ObjectResult.StatusCode это было null
. Кроме того, фильтр действий может повлиять на это изменение, если ожидается значение NULL вместо 200.
Представленные версии
ASP.NET Core 6.0
Прежнее поведение
Ранее действие контроллера, которое возвращает T
и задает Response.StatusCode
вручную заданный код состояния ответа. Например, действие следующего контроллера создаст 202 Accepted
ответ.
// Generates a 202 Accepted response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Новое поведение
Теперь то же действие контроллера, которое возвращает T
и задает Response.StatusCode
вручную, всегда создает 200 OK
ответ.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Тип критического изменения
Это изменение может повлиять на совместимость исходного кода.
Причина изменения
Возврат кода 200 OK
состояния задокументирован с момента ASP.NET Core 3.1. Однако он сохраняется StatusCode null
как и в конечном итоге создает 200 OK
ответ только потому, что это значение по умолчанию. Так как внутреннее поведение по умолчанию может измениться, мы решили избежать использования по умолчанию и явно задать StatusCode ожидаемое 200 OK
.
Рекомендуемое действие
Если код задает код состояния вручную и нарушается этим изменением, необходимо изменить действие контроллера. Например, следующий фрагмент кода задает код состояния 202 и нарушается этим изменением.
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Чтобы сохранить требуемое поведение кода состояния 202, в следующих фрагментах кода показаны некоторые параметры.
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();
}
Затронутые API
- Действия контроллера MVC/API