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


Estoy escribiendo una aplicación que está aceptando datos POST de un servicio de terceros.

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

¿Cómo puedo hacer esto desde mi controlador?

 176
Author: p.campbell, 2011-02-22

5 answers

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
}
 327
Author: Brian Behm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-15 18:36:53

200 es solo el encabezado HTTP normal para una solicitud exitosa. Si eso es todo que necesita, solo tiene el controlador return new EmptyResult();

 48
Author: Kevin Stricker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-22 00:32:42

Simplemente puede establecer el código de estado de la respuesta en 200 como el siguiente

public ActionResult SomeMethod(parameters...)
{
   //others code here
   ...      
   Response.StatusCode = 200;
   return YourObject;  
}
 34
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-03 07:09:03
    [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 });
        }
    }
 16
Author: Brian Ogden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-18 20:12:11

La forma de hacer esto en. NET Core es (en el momento de escribir esto) 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 se puede usar como un tipo de retorno de su acción.

Como refactor, podría mejorar la legibilidad usando un cast de la enumeración de códigos de estado HTTP como:

return StatusCode((int)HttpStatusCode.OK);

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

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

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

 0
Author: user1477388,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-28 18:50:58