Вернуть http 204 «без содержимого» клиенту в ASP.NET MVC2 - PullRequest
25 голосов
/ 22 декабря 2010

В приложении ASP.net MVC 2, которое я имею, я хочу вернуть ответ 204 Нет содержимого на пост-операцию. Текущий метод моего контроллера имеет тип возврата void, но он возвращает клиенту ответ как 200 OK с заголовком Content-Length, установленным в 0. Как я могу сделать ответ в 204?

[HttpPost]
public void DoSomething(string param)
{
    // do some operation with param

    // now I wish to return a 204 no content response to the user 
    // instead of the 200 OK response
}

Ответы [ 4 ]

34 голосов
/ 22 декабря 2010

В MVC3 есть класс HttpStatusCodeResult . Вы можете свернуть свое собственное для приложения MVC2:

public class HttpStatusCodeResult : ActionResult
{
    private readonly int code;
    public HttpStatusCodeResult(int code)
    {
        this.code = code;
    }

    public override void ExecuteResult(System.Web.Mvc.ControllerContext context)
    {
        context.HttpContext.Response.StatusCode = code;
    }
}

Вы должны изменить свой метод контроллера следующим образом:

[HttpPost]
public ActionResult DoSomething(string param)
{
    // do some operation with param

    // now I wish to return a 204 no content response to the user 
    // instead of the 200 OK response
    return new HttpStatusCodeResult(HttpStatusCode.NoContent);
}
2 голосов
/ 13 марта 2019

В ASP.NET Core 2 вы можете использовать NoContent.

[HttpPost("Update")]
public async Task<IActionResult> DoSomething(object parameters)
{
    return NoContent();
}
0 голосов
/ 24 апреля 2019

Вы можете просто вернуть IHttpActionResult и использовать StatusCode:

public IHttpActionResult DoSomething()
{
    //do something

    return StatusCode(System.Net.HttpStatusCode.NoContent);        
}
0 голосов
/ 08 апреля 2018

К вашему сведению, я использую ваш подход, и он возвращает 204 No Content (просто вернуть пустоту), я думаю, у вас есть другая проблема

[HttpPost]
public void SetInterests(int userid, [FromBody] JObject bodyParams)
{
     ....
     .....

    //returning nothing
}
...