วิธีการส่งคืนรหัสสถานะ 200 HTTP จากตัวควบคุม ASP.NET MVC 3


217

ฉันกำลังเขียนแอปพลิเคชันที่รับข้อมูล POST จากบริการบุคคลที่สาม

เมื่อข้อมูลนี้ถูกโพสต์ฉันจะต้องส่งคืนรหัสสถานะ HTTP 200 รหัส

ฉันจะทำสิ่งนี้จากคอนโทรลเลอร์ของฉันได้อย่างไร

คำตอบ:


390

ในตัวควบคุมของคุณคุณจะส่งคืน HttpStatusCodeResult แบบนี้ ...

[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
หรือค่อนข้าง "ส่งคืน HttpStatusCodeResult ((int) HttpStatusCode.OK ใหม่);"
แดน

1
@ ด่านนั่นไม่จำเป็น มีการโอเวอร์โหลดที่ใช้intทั้งการHttpStatusCodeและ
MEMark

11
เมื่อต้องการส่งคืนรหัสสถานะ 204 ให้ทำดังนี้: ส่งคืน HttpStatusCodeResult ใหม่ (HttpStatusCode.NoContent);
David Silva Smith

1
@ Memark ฉันต้องส่งเพื่อให้มันทำงานได้ การใช้. NET 4 & MVC 3 ฉันไม่ได้รับการแทนที่ที่จะใช้ HttpStatusCode
Shawn South

@ShawnSouth ฉันไม่สามารถหาข้อมูลใด ๆ ในเอกสารเกี่ยวกับรุ่นที่มีการโอเวอร์โหลดนี้ msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 เป็นเพียงส่วนหัว HTTP ปกติสำหรับคำขอที่ประสบความสำเร็จ หากนั่นคือทั้งหมดที่คุณต้องการเพียงมีคอนโทรลเลอร์return new EmptyResult();


3
คุณควรใช้HttpStatusCodeResult(...)แทนเนื่องจากชัดเจนมากขึ้นเกี่ยวกับสิ่งที่คุณพยายามทำ ตามคำตอบที่ยอมรับ
Ben

42

คุณสามารถตั้งรหัสสถานะของการตอบสนองเป็น 200 ได้ดังต่อไปนี้

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

10
โหวตเพราะสิ่งนี้ช่วยให้คุณสามารถส่งข้อมูลอื่น ๆ กลับมาได้เช่นเดียวกับรหัสสถานะ
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 });
        }
    }

กรณีใช้งานจริงของฉันส่งคืนวัตถุ Json แต่ยังต้องการระบุ HTTP_STATUS_CODE ด้วย
sobelito

สำหรับ WebAPI ที่ส่งคืนรหัสสถานะให้ใช้: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

คำตอบที่ดีที่สุดเพราะรวมการใช้งานทุกกรณี
vibs2006

7

วิธีการทำเช่นนี้ใน. NET Core คือ (ณ เวลาที่เขียน) ดังนี้:

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

    return StatusCode(400);
}

กระบวนการStatusCodeวิธีส่งกลับชนิดของStatusCodeResultซึ่งใช้IActionResultและสามารถใช้เป็นชนิดส่งคืนของการกระทำของคุณ

ในฐานะที่เป็น refactor คุณสามารถปรับปรุงความสามารถในการอ่านโดยใช้การส่งรหัสสถานะ HTTP เช่น:

return StatusCode((int)HttpStatusCode.OK);

นอกจากนี้คุณยังสามารถใช้ผลลัพธ์บางประเภทที่สร้างขึ้น ตัวอย่างเช่น:

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.