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?

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
}

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();


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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.