Як повернути 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.