Come restituire un codice di stato 200 HTTP dal controller ASP.NET MVC 3


218

Sto scrivendo un'applicazione che accetta i dati POST da un servizio di terze parti.

Quando questi dati vengono POST, devo restituire un codice di stato 200 HTTP.

Come posso farlo dal mio controller?

Risposte:


390

Nel controller restituiresti un HttpStatusCodeResult in questo modo ...

[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
o piuttosto "return new HttpStatusCodeResult ((int) HttpStatusCode.OK);"
dan

1
@dan, non è necessario. Ci sono sovraccarichi che richiedono sia un intche un HttpStatusCode.
MEMark

11
per restituire un codice di stato 204, procedere come segue: return new HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith

1
@MEMark, ho dovuto lanciare per farlo funzionare. Utilizzando .NET 4 e MVC 3 non mi è stato fornito un override che richiederebbe un HttpStatusCode.
Shawn South,

@ShawnSouth, non riesco a trovare alcuna informazione nei documenti su quali versioni contengano questo sovraccarico. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 è solo la normale intestazione HTTP per una richiesta riuscita. Se è tutto ciò di cui hai bisogno, basta avere il controllerreturn new EmptyResult();


3
Dovresti usare HttpStatusCodeResult(...)invece in quanto è molto più esplicito su ciò che stai cercando di ottenere. Secondo la risposta accettata.
Ben

43

Puoi semplicemente impostare il codice di stato della risposta su 200 come il seguente

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

11
Esegui l'upgrade perché ti consente di inviare altre informazioni e solo il codice di stato
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 });
        }
    }

Esattamente il mio caso d'uso, restituendo l'oggetto Json ma volevo anche fornire HTTP_STATUS_CODE
sobelito

Per i codici di stato di ritorno WebAPI, utilizzare: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce,

La migliore risposta in quanto combina tutti i casi d'uso
vibs2006,

7

Il modo per farlo in .NET Core è (al momento della scrittura) come segue:

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

    return StatusCode(400);
}

Il metodo StatusCode restituisce un tipo di StatusCodeResult che implementa IActionResult e può quindi essere utilizzato come tipo di ritorno dell'azione.

Come refactor, potresti migliorare la leggibilità usando un cast dei codici di stato HTTP enum come:

return StatusCode((int)HttpStatusCode.OK);

Inoltre, è possibile utilizzare anche alcuni dei tipi di risultati integrati. Per esempio:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.