Cara mengembalikan 200 Kode Status HTTP dari pengontrol ASP.NET MVC 3


217

Saya menulis aplikasi yang menerima data POST dari layanan pihak ketiga.

Ketika data ini dikirim, saya harus mengembalikan 200 Status Status HTTP.

Bagaimana saya bisa melakukan ini dari controller saya?

Jawaban:


390

Di controller Anda, Anda akan mengembalikan HttpStatusCodeResult seperti ini ...

[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
atau lebih tepatnya "kembalikan HttpStatusCodeResult ((int) HttpStatusCode.OK) baru;"
dan

1
@dan, itu tidak diperlukan. Ada kelebihan yang membutuhkan intdan HttpStatusCode.
MEMark

11
untuk mengembalikan kode status 204 lakukan ini: kembalikan HttpStatusCodeResult baru (HttpStatusCode.NoContent);
David Silva Smith

1
@Mark, saya harus berperan untuk membuatnya bekerja. Menggunakan .NET 4 & MVC 3 saya tidak diberi override yang akan mengambil HttpStatusCode.
Shawn South

@ShawnSouth, sepertinya saya tidak dapat menemukan informasi dalam dokumen tentang versi apa yang mengandung kelebihan ini. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 hanyalah header HTTP normal untuk permintaan yang berhasil. Jika itu semua yang Anda butuhkan, hanya memiliki controllerreturn new EmptyResult();


3
Anda sebaiknya menggunakan HttpStatusCodeResult(...)karena itu lebih eksplisit tentang apa yang ingin Anda capai. Sesuai jawaban yang diterima.
Ben

42

Anda cukup mengatur kode status dari respons ke 200 seperti berikut ini

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

10
Suara positif karena ini memungkinkan Anda untuk mengirim kembali info lain serta hanya kode status
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 });
        }
    }

Persis kasus penggunaan saya, mengembalikan objek Json tetapi juga ingin memasok HTTP_STATUS_CODE
sobelito

Untuk WebAPI mengembalikan kode status, gunakan: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

Jawaban terbaik karena menggabungkan semua kasus penggunaan
vibs2006

7

Cara untuk melakukan ini dalam. NET Core adalah (pada saat penulisan) sebagai berikut:

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

    return StatusCode(400);
}

The StatusCode kembali metode jenis StatusCodeResult yang mengimplementasikan IActionResult dan dengan demikian dapat digunakan sebagai jenis kembali tindakan Anda.

Sebagai refactor, Anda dapat meningkatkan keterbacaan dengan menggunakan cast kode status HTTP enum seperti:

return StatusCode((int)HttpStatusCode.OK);

Selain itu, Anda juga bisa menggunakan beberapa tipe hasil bawaan. Sebagai contoh:

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.