ActionResult<T> , StatusCode değerini 200 olarak ayarlar
dönüş türünü olarak ActionResult<TValue>ObjectResult.StatusCode bildiren bir MVC/API denetleyicisi eyleminde döndürdüğünüzdeT
, değeri olduğu durumlar T
ProblemDetailsdışında her zaman 200 olarak ayarlanır.
Bu değişiklik, daha önce olduğu için durum kodunu el ile ayarladığınız bazı senaryolarda beklenmeyen davranışlara ObjectResult.StatusCode null
neden olabilir. Ayrıca, bir eylem filtresi 200 yerine null değer bekliyorsa bu değişiklikten etkilenebilir.
Sürüm kullanıma sunulmuştur
ASP.NET Core 6.0
Önceki davranış
Daha önce, bir denetleyicinin döndüren T
ve ayarlayan Response.StatusCode
eylemi, belirtilen yanıt durum kodunu el ile oluşturmuluyor. Örneğin, aşağıdaki denetleyicinin eylemi bir 202 Accepted
yanıt oluşturur.
// Generates a 202 Accepted response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Yeni davranış
Şimdi, aynı denetleyicinin el ile döndüren T
ve ayarlayan Response.StatusCode
eylemi her zaman bir 200 OK
yanıt oluşturur.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Hataya neden olan değişikliğin türü
Bu değişiklik kaynak uyumluluğunu etkileyebilir.
Değişiklik nedeni
ASP.NET Core 3.1'den bu yana durum kodunun 200 OK
döndürüleceği belgelenmiştir. Ancak, olarak tutar StatusCode ve sonunda yalnızca varsayılan olduğu için bir 200 OK
yanıt null
oluşturur. Varsayılan iç davranış değişebileceğinden, varsayılana güvenmekten ve açıkça beklenen 200 OK
değerine ayarlamaktan StatusCode kaçınmaya karar verdik.
Önerilen eylem
Kodunuz durum kodunu el ile ayarlarsa ve bu değişiklikle bozulursa denetleyici eyleminizi değiştirmeniz gerekir. Örneğin, aşağıdaki kod parçacığı 202 durum kodunu ayarlar ve bu değişiklikle bozulur.
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
202 durum kodunun istenen davranışını korumak için aşağıdaki kod parçacıklarında bazı seçenekler gösterilir.
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();
}
Etkilenen API’ler
- MVC/API denetleyicisi eylemleri