다음을 통해 공유


ActionResult<T>는 StatusCode를 200으로 설정합니다.

반환 유형을 ActionResult<TValue>(으)로 선언하는 MVC/API 컨트롤러 작업에서 T을(를) 반환할 때 T이(가) ProblemDetails인 경우를 제외하고 ObjectResult.StatusCode은(는) 항상 200으로 설정됩니다.

이 변경으로 인해 이전에 ObjectResult.StatusCode이(가) null였기 때문에 상태 코드를 수동으로 설정하는 일부 시나리오에서 예기치 않은 동작이 발생할 수 있습니다. 또한 작업 필터는 200이 아닌 null 값이 예상되는 경우 이 변경의 영향을 받을 수 있습니다.

도입된 버전

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 컨트롤러 작업

참고 항목