Comment renvoyer un code d'état HTTP 200 à partir du contrôleur ASP.NET MVC 3


217

J'écris une application qui accepte les données POST d'un service tiers.

Lorsque ces données sont publiées, je dois retourner un code d'état HTTP 200.

Comment puis-je le faire depuis mon contrôleur?

Réponses:


390

Dans votre contrôleur, vous retourneriez un HttpStatusCodeResult comme ceci ...

[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
ou plutôt "retourner un nouveau HttpStatusCodeResult ((int) HttpStatusCode.OK);"
dan

1
@dan, ce n'est pas nécessaire. Il y a des surcharges qui prennent un intet un HttpStatusCode.
MEMark

11
pour renvoyer un code d'état 204, procédez comme suit: renvoyez le nouveau HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith

1
@MEMark, j'ai dû lancer un casting pour que ça marche. En utilisant .NET 4 et MVC 3, je n'ai pas reçu de remplacement qui prendrait un HttpStatusCode.
Shawn South

@ShawnSouth, je n'arrive pas à trouver d'informations dans les documents sur les versions contenant cette surcharge. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 est juste l'en-tête HTTP normal pour une requête réussie. Si c'est tout ce dont vous avez besoin, ayez simplement le contrôleurreturn new EmptyResult();


3
Vous devriez utiliser à la HttpStatusCodeResult(...)place car il est beaucoup plus explicite de ce que vous essayez de réaliser. Selon la réponse acceptée.
Ben

42

Vous pouvez simplement définir le code d'état de la réponse à 200 comme suit

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

10
Votez parce que cela vous permet de renvoyer d'autres informations ainsi que le code d'état
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 });
        }
    }

Exactement mon cas d'utilisation, renvoyant un objet Json mais souhaitant également fournir HTTP_STATUS_CODE
sobelito

Pour WebAPI renvoyant des codes d'état, utilisez: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

Meilleure réponse car il combine tous les cas d'utilisation
vibs2006

7

La façon de procéder dans .NET Core est (au moment de la rédaction) comme suit:

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

    return StatusCode(400);
}

La méthode StatusCode renvoie un type de StatusCodeResult qui implémente IActionResult et peut donc être utilisé comme type de retour de votre action.

En tant que refactor, vous pouvez améliorer la lisibilité en utilisant un transtypage des codes d'état HTTP énumérés comme:

return StatusCode((int)HttpStatusCode.OK);

De plus, vous pouvez également utiliser certains des types de résultats intégrés. Par exemple:

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.