Web API Best Approach for returning HttpResponseMessage

VAAA picture VAAA · Apr 11, 2014 · Viewed 89.2k times · Source

I have a Web API project and right my methods always returns HttpResponseMessage.

So, if it works or fails I return:

No errors:

return Request.CreateResponse(HttpStatusCode.OK,"File was processed.");

Any error or fail

return Request.CreateResponse(HttpStatusCode.NoContent, "The file has no content or rows to process.");

When I return an object then I use:

return Request.CreateResponse(HttpStatusCode.OK, user);

I would like to know how can I return to my HTML5 client a better encapsulated respose, so I can return more information about the transaction, etc.

I was thinking on creating a custom class that can encapsulate the HttpResponseMessage but also have more data.

Does anyone have implemented something similar?

Answer

Kalel Wade picture Kalel Wade · Apr 11, 2014

Although this is not directly answering the question, I wanted to provide some information I found usefull. http://weblogs.asp.net/dwahlin/archive/2013/11/11/new-features-in-asp-net-web-api-2-part-i.aspx

The HttpResponseMessage has been more or less replaced with IHttpActionResult. It is much cleaner an easier to use.

public IHttpActionResult Get()
{
     Object obj = new Object();
     if (obj == null)
         return NotFound();
     return Ok(obj);
 }

Then you can encapsulate to create custom ones. How to set custom headers when using IHttpActionResult?

I haven't found a need yet for implementing a custom result yet but when I do, I will be going this route.

Its probably very similar to do using the old one as well.

To expand further on this and provide a bit more info. You can also include messages with some of the requests. For instance.

return BadRequest("Custom Message Here");

You can't do this with many of the other ones but helps for common messages you want to send back.