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?

Paul Brown
la source

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
}
Brian Behm
la source
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();

Kevin Stricker
la source
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;  
}
Jack
la source
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 });
        }
    }
Brian Ogden
la source
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

user1477388
la source