ASP.NET MVC 3 denetleyicisinden 200 HTTP Durum Kodu döndürme


217

Bir üçüncü taraf hizmetinden POST verilerini kabul eden bir uygulama yazıyorum.

Bu veriler POST olduğunda 200 HTTP Durum Kodu döndürmeliyim.

Bunu kontrol cihazımdan nasıl yapabilirim?

Yanıtlar:


390

Oyun kumandanızda böyle bir HttpStatusCodeResult döndürürdünüz ...

[HttpPost]
public ActionResult SomeMethod(...your method parameters go here...)
{
   // todo: put your processing code here

   //If not using MVC5
   return new HttpStatusCodeResult(200);

   //If using MVC5
   return new HttpStatusCodeResult(HttpStatusCode.OK);  // OK = 200
}

14
veya daha çok "yeni HttpStatusCodeResult ((int) HttpStatusCode.OK) döndür;"
dan

1
@dan, buna gerek yok. intYanı sıra bir aşırı yükler vardır HttpStatusCode.
MEMark

11
204 durum kodu döndürmek için bunu yapın: return new HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith

1
@ Mark, çalışmasını sağlamak için yayınlamak zorunda kaldım. .NET 4 ve MVC 3 kullanarak bir HttpStatusCode alacak bir geçersiz kılma sağlanmadı.
Shawn South

@ShawnSouth, bu aşırı yüklemeyi hangi sürümlerde içerdiği konusunda dokümanlarda herhangi bir bilgi bulamıyorum. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200, başarılı bir istek için yalnızca normal HTTP üstbilgisidir. İhtiyacınız olan tek şey buysa , kontrol cihazına sahip olunreturn new EmptyResult();


3
Bunun HttpStatusCodeResult(...)yerine, neyi başarmaya çalıştığınız konusunda çok daha açık olduğu için kullanmalısınız. Kabul edilen cevaba göre.
Ben

42

Yanıtın durum kodunu aşağıdaki gibi 200 olarak ayarlayabilirsiniz

public ActionResult SomeMethod(parameters...)
{
   //others code here
   ...      
   Response.StatusCode = 200;
   return YourObject;  
}

10
Olumlu oy çünkü bu sadece diğer bilgileri ve sadece durum kodunu geri göndermenize izin veriyor
Avrohom Yisroel

22
    [HttpPost]
    public JsonResult ContactAdd(ContactViewModel contactViewModel)
    {
        if (ModelState.IsValid)
        {
            var job = new Job { Contact = new Contact() };

            Mapper.Map(contactViewModel, job);
            Mapper.Map(contactViewModel, job.Contact);

            _db.Jobs.Add(job);

            _db.SaveChanges();

            //you do not even need this line of code,200 is the default for ASP.NET MVC as long as no exceptions were thrown
            //Response.StatusCode = (int)HttpStatusCode.OK;

            return Json(new { jobId = job.JobId });
        }
        else
        {
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json(new { jobId = -1 });
        }
    }

Tam olarak benim kullanım durumum, Json nesnesini döndürüyor, ancak aynı zamanda HTTP_STATUS_CODE
sobelito 20:16

WebAPI döndüren durum kodları için şunu kullanın: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

Tüm kullanım durumlarını birleştirdiği için en iyi cevap
vibs2006

7

Bunu .NET Core'da yapmanın yolu (yazma sırasında) aşağıdaki gibidir:

public async Task<IActionResult> YourAction(YourModel model)
{
    if (ModelState.IsValid)
    {
        return StatusCode(200);
    }

    return StatusCode(400);
}

StatusCode yöntemi döndürür bir tür StatusCodeResult uygulayan IActionResult ve böylece bir eylem dönüş türü kullanılabilir.

Bir refactor olarak, HTTP durum kodlarının bir numaralandırmasını kullanarak okunabilirliği artırabilirsiniz:

return StatusCode((int)HttpStatusCode.OK);

Ayrıca, yerleşik sonuç türlerinden bazılarını da kullanabilirsiniz. Örneğin:

return Ok(); // returns a 200
return BadRequest(ModelState); // returns a 400 with the ModelState as JSON

Ref. StatusCodeResult - https://docs.microsoft.com/tr-tr/dotnet/api/microsoft.aspnetcore.mvc.statuscoderesult?view=aspnetcore-2.1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.