Aracılığıyla paylaş


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 nullneden 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 OKdeğerine ayarlamaktan StatusCode kaçınmaya 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 bkz.