Return Content with Ihttpactionresult for Non-Ok Response

Return content with IHttpActionResult for non-OK response

I ended up going with the following solution:

public class HttpActionResult : IHttpActionResult
{
private readonly string _message;
private readonly HttpStatusCode _statusCode;

public HttpActionResult(HttpStatusCode statusCode, string message)
{
_statusCode = statusCode;
_message = message;
}

public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage(_statusCode)
{
Content = new StringContent(_message)
};
return Task.FromResult(response);
}
}

... which can be used like this:

public IHttpActionResult Get()
{
return new HttpActionResult(HttpStatusCode.InternalServerError, "error message"); // can use any HTTP status code
}

I'm open to suggestions for improvement. :)

How do I return NotFound() IHttpActionResult with an error message or exception?

Here's a one-liner for returning a IHttpActionResult NotFound with a simple message:

return Content(HttpStatusCode.NotFound, "Foo does not exist.");

How to add code in Response Body of IHttpActionResult return BadRequest(Message)

You can do something like this, with out testing it:

return Content((HttpStatusCode)400, "Failed Invalid Product Id");

If you really want to have customized way to do it than you need to extend IHttpActionResult implementation with your own class like the following example which is inspired from this link:

public class ErrorResult : IHttpActionResult
{
private readonly Error _error;
private readonly HttpRequestMessage _request;

public ErrorResult(Error error, HttpRequestMessage request)
{
_error = error;
_request = request;
}

public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var err = new Error()
{
Code = _error.Code,
Message = _error.Message
};

var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new ObjectContent<Error>(err, new JsonMediaTypeFormatter()),
RequestMessage = _request
};
return Task.FromResult(response);
}
}

public class Error
{
public string Code { get; set; }
public string Message { get; set; }
}

Then to use it:

var err = new Error()
{
Code = "400",
Message = "Failed Invalid Product Id"
};

return new ErrorResult(err, Request);

This will error return:

Sample Image



Related Topics



Leave a reply



Submit