Jak zwrócić 200 kod stanu HTTP z kontrolera ASP.NET MVC 3


217

Piszę aplikację, która przyjmuje dane POST z usługi strony trzeciej.

Po wysłaniu tych danych muszę zwrócić kod stanu HTTP 200.

Jak mogę to zrobić z mojego kontrolera?

Odpowiedzi:


390

W swoim kontrolerze zwrócisz HttpStatusCodeResult w ten sposób ...

[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
lub raczej „zwróć nowy HttpStatusCodeResult ((int) HttpStatusCode.OK);”
dan

1
@dan, to nie jest potrzebne. Istnieją przeciążenia, które wymagają intzarówno HttpStatusCode.
UWAGI

11
aby zwrócić kod statusu 204, wykonaj następujące czynności: zwróć nowy HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith

1
@ Uwaga, musiałem przesyłać, aby to działało. Używając .NET 4 i MVC 3, nie otrzymałem przesłonięcia, które wymagałoby HttpStatusCode.
Shawn South

@ShawnSouth, nie mogę znaleźć żadnych informacji w dokumentach na temat tego, które wersje zawierają to przeciążenie. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
UWAGA

52

200 jest zwykłym nagłówkiem HTTP dla pomyślnego żądania. Jeśli to wszystko, czego potrzebujesz, po prostu kontrolerreturn new EmptyResult();


3
Powinieneś użyć HttpStatusCodeResult(...)zamiast tego, ponieważ jest o wiele bardziej wyraźne na temat tego, co próbujesz osiągnąć. Zgodnie z przyjętą odpowiedzią.
Ben

42

Możesz po prostu ustawić kod stanu odpowiedzi na 200, jak poniżej

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

10
Głosuj, ponieważ pozwala to na odesłanie innych informacji, a także tylko kodu statusu
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 });
        }
    }

Dokładnie mój przypadek użycia, zwracający obiekt Json, ale chciałem również podać kod_STATUS_CODE HTTP
sobelito,

W przypadku zwracających kody stanu WebAPI użyj: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

Najlepsza odpowiedź, ponieważ łączy wszystkie przypadki użycia
vibs2006,

7

Sposób na zrobienie tego w .NET Core jest (w momencie pisania) następująco:

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

    return StatusCode(400);
}

Metoda StatusCode zwraca typ StatusCodeResult, który implementuje IActionResult, a zatem może być użyty jako typ zwracanej akcji.

Jako refaktor możesz poprawić czytelność, używając rzutowania wyliczeń kodów stanu HTTP, takich jak:

return StatusCode((int)HttpStatusCode.OK);

Ponadto można również użyć niektórych wbudowanych typów wyników. Na przykład:

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.