ActionResult<T> nastaví StatusCode na 200
Při vrácení T
v akci kontroleru MVC/API, která deklaruje návratový typ jako ActionResult<TValue>, ObjectResult.StatusCode je vždy nastavena na hodnotu 200, s výjimkou případů, kdy T
je ProblemDetails.
Tato změna může způsobit neočekávané chování v některých scénářích, kdy jste stavový kód nastavili ručně, protože dříve ObjectResult.StatusCode byla null
. Filtr akcí může být také ovlivněn touto změnou, pokud očekává hodnotu null místo 200.
Zavedená verze
ASP.NET Core 6.0
Předchozí chování
Dříve akce kontroleru, která vrací T
a nastavuje Response.StatusCode
ručně vygenerovaný zadaný stavový kód odpovědi. Například následující akce kontroleru vygeneruje 202 Accepted
odpověď.
// Generates a 202 Accepted response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Nové chování
Teď stejná akce kontroleru, která vrací T
a nastavuje Response.StatusCode
ručně, vždy vygeneruje 200 OK
odpověď.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Typ zásadní změny
Tato změna může mít vliv na kompatibilitu zdroje.
Důvod změny
Vrácení stavového 200 OK
kódu je zdokumentované od ASP.NET Core 3.1. Zachová ale StatusCode jako null
a nakonec vygeneruje 200 OK
odpověď jenom proto, že se jedná o výchozí hodnotu. Vzhledem k tomu, že se výchozí vnitřní chování může změnit, rozhodli jsme se vyhnout spoléhat na výchozí a explicitně nastavit StatusCode na očekávaný 200 OK
.
Doporučená akce
Pokud váš kód nastaví stavový kód ručně a touto změnou se přeruší, budete muset změnit akci kontroleru. Například následující fragment kódu nastaví stavový kód 202 a tato změna se přeruší.
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Chcete-li zachovat požadované chování stavového kódu 202, následující fragmenty kódu zobrazují některé možnosti.
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();
}
Ovlivněná rozhraní API
- Akce kontroleru MVC/API
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro