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?

Paul Brown
sumber

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
}
Brian Behm
sumber
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();

Kevin Stricker
sumber
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;  
}
Mendongkrak
sumber
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 });
        }
    }
Brian Ogden
sumber
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

pengguna1477388
sumber