Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
När du returnerar en T i en MVC/API-kontrollantåtgärd som deklarerar returtypen som ActionResult<TValue>, ObjectResult.StatusCode är alltid inställd på 200, förutom när T är en ProblemDetails.
Den här ändringen kan orsaka oväntat beteende i vissa scenarier där du anger statuskoden manuellt, eftersom tidigare ObjectResult.StatusCode var null. Dessutom kan ett åtgärdsfilter påverkas av den här ändringen om det förväntar sig ett null-värde i stället för 200.
Version lanserad
ASP.NET Core 6.0
Tidigare beteende
Tidigare genererade en kontrollants åtgärd som returnerar T och anger Response.StatusCode den angivna svarsstatuskoden manuellt. Följande kontrollants åtgärd genererar till exempel ett 202 Accepted svar.
// Generates a 202 Accepted response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Nytt beteende
Nu genererar samma kontrollants åtgärd som returnerar T och ställer in Response.StatusCode manuellt alltid ett 200 OK svar.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Typ av brytande ändring
Den här ändringen kan påverka källkompatibiliteten.
Orsak till ändring
Att returnera en statuskod av 200 OK har dokumenterats sedan ASP.NET Core 3.1. Men den behåller StatusCode som null och genererar så småningom ett 200 OK svar bara för att det är standardvärdet. Eftersom det interna standardbeteendet kunde ändras bestämde vi oss för att undvika att förlita oss på standardinställningen och uttryckligen ange StatusCode till förväntat 200 OK.
Rekommenderad åtgärd
Om koden anger statuskoden manuellt och bryts av den här ändringen måste du ändra kontrollantåtgärden. Följande kodfragment anger till exempel statuskoden 202 och bryts av den här ändringen.
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
För att behålla det önskade beteendet för en 202-statuskod visar följande kodfragment några alternativ.
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();
}
Berörda API:er
- MVC/API-kontrollantåtgärder
Se även
ASP.NET Core