次の方法で共有


ActionResult<T> は StatusCode を 200 に設定します

戻り値の型をTとして宣言する MVC/API コントローラー アクションでActionResult<TValue>を返す場合、ObjectResult.StatusCodeは常に 200 に設定されます。ただし、TProblemDetailsの場合を除きます。

この変更により、以前は ObjectResult.StatusCodenullされていたため、状態コードを手動で設定するシナリオで予期しない動作が発生する可能性があります。 また、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 以降に記載されています。 ただし、 StatusCodenull として保持され、最終的には既定であるためにのみ 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 コントローラーアクション

こちらも参照ください