Cómo devolver un código de estado HTTP 200 desde el controlador ASP.NET MVC 3

217

Estoy escribiendo una aplicación que acepta datos POST de un servicio de terceros.

Cuando se envían estos datos, debo devolver un código de estado HTTP 200.

¿Cómo puedo hacer esto desde mi controlador?

Paul Brown
fuente

Respuestas:

390

En su controlador, devolvería un HttpStatusCodeResult como este ...

[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
fuente
14
o más bien "devolver nuevo HttpStatusCodeResult ((int) HttpStatusCode.OK);"
dan
1
@dan, eso no es necesario. Hay sobrecargas que toman inttanto como un HttpStatusCode.
MEMark
11
para devolver un código de estado 204 haga esto: devuelva un nuevo HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith
1
@MEMark, tuve que emitir para que funcione. Usando .NET 4 y MVC 3 no se me proporcionó una anulación que tomaría un HttpStatusCode.
Shawn South
@ShawnSouth, parece que no puedo encontrar ninguna información en los documentos sobre qué versiones contienen esta sobrecarga. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark
52

200 es solo el encabezado HTTP normal para una solicitud exitosa. Si eso es todo lo que necesita, solo tenga el controladorreturn new EmptyResult();

Kevin Stricker
fuente
3
En su HttpStatusCodeResult(...)lugar, debe usarlo, ya que es mucho más explícito sobre lo que está tratando de lograr. Según la respuesta aceptada.
Ben
42

Simplemente puede configurar el código de estado de la respuesta a 200 como el siguiente

public ActionResult SomeMethod(parameters...)
{
   //others code here
   ...      
   Response.StatusCode = 200;
   return YourObject;  
}
Jack
fuente
10
Votar porque esto le permite enviar otra información, así como solo el código de estado
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
fuente
Exactamente mi caso de uso, devolviendo el objeto Json pero también quería proporcionar HTTP_STATUS_CODE
sobelito
Para los códigos de estado de retorno de WebAPI, use: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce
La mejor respuesta, ya que combina todos los casos de uso
vibs2006
7

La forma de hacer esto en .NET Core es (en el momento de la escritura) de la siguiente manera:

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

    return StatusCode(400);
}

El método StatusCode devuelve un tipo de StatusCodeResult que implementa IActionResult y, por lo tanto, puede usarse como un tipo de retorno de su acción.

Como refactorizador, puede mejorar la legibilidad utilizando un reparto de la enumeración de los códigos de estado HTTP como:

return StatusCode((int)HttpStatusCode.OK);

Además, también puede usar algunos de los tipos de resultados integrados. Por ejemplo:

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

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

usuario1477388
fuente