Cách trả về 200 Mã trạng thái HTTP từ bộ điều khiển ASP.NET MVC 3


217

Tôi đang viết một ứng dụng chấp nhận dữ liệu POST từ dịch vụ của bên thứ ba.

Khi dữ liệu này được POST, tôi phải trả về Mã trạng thái 200 HTTP.

Làm thế nào tôi có thể làm điều này từ bộ điều khiển của tôi?

Câu trả lời:


389

Trong bộ điều khiển của bạn, bạn sẽ trả lại một httpStatusCodeResult như thế này ...

[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
hay đúng hơn là "trả lại httpStatusCodeResult mới ((int) HttpStatusCode.OK);"
dan

1
@dan, điều đó không cần thiết. Có quá tải mất một intcũng như một HttpStatusCode.
MEMark

11
để trả về mã trạng thái 204, hãy thực hiện điều này: trả về httpStatusCodeResult mới (HttpStatusCode.NoContent);
David Silva Smith

1
@MEMark, tôi đã phải chọn để làm cho nó hoạt động. Sử dụng .NET 4 & MVC 3 Tôi không được cung cấp một ghi đè sẽ mất một HTTPStatusCode.
Shawn South

@ShawnSouth, tôi dường như không thể tìm thấy bất kỳ thông tin nào trong các tài liệu về những phiên bản nào chứa quá tải này. msdn.microsoft.com/en-us/l
Library / hh413957 (v = vs.118) .aspx

52

200 chỉ là tiêu đề HTTP bình thường cho một yêu cầu thành công. Nếu đó là tất cả những gì bạn cần, chỉ cần có bộ điều khiểnreturn new EmptyResult();


3
Bạn nên sử dụng HttpStatusCodeResult(...)thay vì nó rõ ràng hơn nhiều về những gì bạn đang cố gắng để đạt được. Theo câu trả lời được chấp nhận.
Ben

42

Bạn chỉ có thể đặt mã trạng thái của phản hồi thành 200 như sau

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

10
Upvote vì điều này cho phép bạn gửi lại thông tin khác cũng như mã trạng thái
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 });
        }
    }

Chính xác là trường hợp sử dụng của tôi, trả về đối tượng Json nhưng cũng muốn cung cấp HTTP_STATUS_CODE
sobelito

Đối với WebAPI trả về mã trạng thái, sử dụng: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

Câu trả lời hay nhất vì nó kết hợp tất cả các trường hợp sử dụng
vibs2006

7

Cách để làm điều này trong .NET Core là (tại thời điểm viết) như sau:

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

    return StatusCode(400);
}

Các StatusCode phương pháp lợi nhuận một loại StatusCodeResult mà thực hiện IActionResult và do đó có thể được sử dụng như một kiểu trả về của hành động của bạn.

Là một công cụ tái cấu trúc, bạn có thể cải thiện khả năng đọc bằng cách sử dụng một loạt các mã trạng thái HTTP như:

return StatusCode((int)HttpStatusCode.OK);

Hơn nữa, bạn cũng có thể sử dụng một số loại kết quả được xây dựng. Ví dụ:

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.