Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
MVC/API denetleyicisi eyleminde dönüş türü T
olan bir ActionResult<TValue> döndürüldüğünde, ObjectResult.StatusCode her zaman 200 olarak ayarlanır, ancak T
bir ProblemDetails olduğunda bu durum geçerli değildir.
Bu değişiklik, daha önce ObjectResult.StatusCodenull
olduğu için durum kodunu el ile ayarladığınız bazı senaryolarda beklenmeyen davranışlara 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 T
döndüren ve Response.StatusCode
ayarlayan eylemi her zaman manuel olarak bir 200 OK
yanıt oluşturur.
// Generates a 200 OK response
public ActionResult<Model> Get()
{
Response.StatusCode = StatusCodes.Status202Accepted;
return new Model();
}
Kesinti yaratan değişiklik türü
Bu değişiklik kaynak uyumluluğunuetkileyebilir.
Değişiklik nedeni
200 OK
durum kodunun iadesi, ASP.NET Core 3.1'den itibaren belgelenmiştir. Ancak, StatusCode olarak null
tutar ve sonunda yalnızca varsayılan olduğu için bir 200 OK
yanıt oluşturur. Varsayılan iç davranış değişebileceğinden, varsayılana güvenmekten kaçınmaya ve StatusCode öğesini açıkça beklenen 200 OK
değerine ayarlamaya 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