Aracılığıyla paylaş


ActionResult<T> , StatusCode değerini 200 olarak ayarlar

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.

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

Ayrıca bakınız