Як повернути 200 код коду статусу HTTP від ​​контролера ASP.NET MVC 3


217

Я пишу заявку, яка приймає дані POST від сторонньої служби.

Коли ці дані POSTed, я повинен повернути 200 код коду HTTP.

Як я можу це зробити від свого контролера?

Відповіді:


390

У своєму контролері ви б повернули HttpStatusCodeResult таким чином ...

[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
а точніше "повернути новий HttpStatusCodeResult ((int) HttpStatusCode.OK);"
дан

1
@dan, це не потрібно. Є перевантаження, які приймають intтак само, як і HttpStatusCode.
ПАМ’ЯТ

11
щоб повернути код статусу 204, зробіть це: поверніть новий HttpStatusCodeResult (HttpStatusCode.NoContent);
Девід Сілва Сміт

1
@MEMark, мені довелося це зробити, щоб це працювало. Використовуючи .NET 4 та MVC 3, мені не було надано переопрацювання, яке б прийняло HttpStatusCode.
Шон Південь,

@ShawnSouth, я не можу знайти в документах інформацію про те, які версії містять це перевантаження. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 - це лише звичайний HTTP-заголовок для успішного запиту. Якщо це все, що вам потрібно, просто поставте контролерreturn new EmptyResult();


3
HttpStatusCodeResult(...)Натомість вам слід скористатися, оскільки це набагато чіткіше щодо того, що ви намагаєтесь досягти. Відповідно до прийнятої відповіді.
Бен

42

Ви можете просто встановити код статусу відповіді на 200, як описано нижче

public ActionResult SomeMethod(parameters...)
{
   //others code here
   ...      
   Response.StatusCode = 200;
   return YourObject;  
}

10
Оновлення, оскільки це дозволяє вам надсилати назад іншу інформацію, а також лише код статусу
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 });
        }
    }

Точно мій випадок використання, повертаючи об’єкт Json, але також хотів поставити HTTP_STATUS_CODE
sobelito

Для кодів статусу, що повертаються WebAPI, використовуйте: new StatusCodeResult (HttpStatusCode.NotModified, Request);
Джеймс Джойс

Найкраща відповідь, оскільки вона поєднує в собі всі випадки використання
vibs2006

7

Спосіб зробити це в .NET Core (на момент написання) наступним чином:

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

    return StatusCode(400);
}

Метод StatusCode повертає тип StatusCodeResult, який реалізує IActionResult і тому може бути використаний як тип повернення вашої дії.

Як рефактор, ви можете поліпшити читабельність, використовуючи команду перелічених кодів HTTP status, таких як:

return StatusCode((int)HttpStatusCode.OK);

Крім того, ви також можете використовувати деякі з вбудованих типів результатів. Наприклад:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.