Search code examples
c#asp.net-mvc-2httpresponse

Return http 204 "no content" to client in ASP.NET MVC2


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
}

Solution

  • 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);
    }