Reputation: 6027
In an ASP.net MVC 2 app that I have I want to return a 204 No Content response to a post operation. Current my controller method has a void return type, but this sends back a response to the client as 200 OK with a Content-Length header set to 0. How can I make the response into a 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
}
Upvotes: 47
Views: 55371
Reputation: 519
For .net 6 plus the new approach is
public IActionResult MyAction()
{
return NoContent();
}
Upvotes: 0
Reputation: 2181
You can return a NoContent
ActionResult.
[HttpPost("Update")]
public async Task<IActionResult> DoSomething(object parameters)
{
// do stuff
return NoContent();
}
Upvotes: 24
Reputation: 3125
You can simply return a IHttpActionResult and use StatusCode
:
public IHttpActionResult DoSomething()
{
//do something
return StatusCode(System.Net.HttpStatusCode.NoContent);
}
Upvotes: 25
Reputation: 2193
FYI, i am using your approach and it is returning 204 No Content (just return a void), i think you have another problem
[HttpPost]
public void SetInterests(int userid, [FromBody] JObject bodyParams)
{
....
.....
//returning nothing
}
Upvotes: 0
Reputation: 13941
In MVC3 there is an HttpStatusCodeResult class. You could roll your own for an MVC2 application:
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;
}
}
You'd have to alter your controller method like so:
[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);
}
Upvotes: 48