239 votes

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

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

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

Comment puis-je faire cela à partir de mon contrôleur ?

422voto

Brian Behm Points 2324

Dans votre contrôleur, vous renverriez 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
}

15 votes

Ou plutôt "return new HttpStatusCodeResult((int)HttpStatusCode.OK) ;".

1 votes

@dan, ce n'est pas nécessaire. Il existe des surcharges qui prennent un int ainsi qu'un HttpStatusCode .

12 votes

Pour renvoyer un code d'état 204, procédez comme suit : renvoyez un nouveau HttpStatusCodeResult(HttpStatusCode.NoContent) ;

55voto

Kevin Stricker Points 11294

200 est simplement l'en-tête HTTP normal pour une demande réussie. Si c'est tous dont vous avez besoin, il suffit d'avoir le contrôleur return new EmptyResult();

5 votes

Vous devez utiliser HttpStatusCodeResult(...) car il est beaucoup plus explicite sur ce que vous essayez d'obtenir. Conformément à la réponse acceptée.

49voto

Jack Points 1203

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;  
}

12 votes

Upvote parce que cela vous permet de renvoyer d'autres informations que le simple code d'état.

25voto

Brian Ogden Points 1954
    [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 });
        }
    }

12voto

user1477388 Points 5659

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

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

    return StatusCode(400);
}

Le site StatusCode renvoie un type de StatusCodeResult qui met en œuvre IActionResult et peut donc être utilisé comme type de retour de votre action.

En tant que refactor, vous pourriez améliorer la lisibilité en utilisant un cast de l'enum des codes de statut HTTP comme :

return StatusCode((int)HttpStatusCode.OK);

En outre, 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X