Search code examples
jsonweb-services.net-4.0httprequestwcf-rest

Reading HttpRequest Body in REST WCF


I got a REST WCF Service running in .net 4 and I've tested the web service it is working and accepting HttpRequest I make to it. But I ran into a problem trying to access the HttpRequest body within the web service. I've tried sending random sizes of data appended on the HttpRequest using both Fiddler and my WinForm app and I can't seem to find any objects in runtime where I can find my request body is located. My initial instinct was to look in the HttpContext.Current.Request.InputStream but the length of that property is 0, so I tried looking in IncomingWebRequestContext that object doesn't even have a method nor properties to get the body of the HttpRequest.

So my question is, is there actually a way to access the HttpRequest request body in WCF?

PS: The data inside the request body is JSON strings and for response it would return the data inside response body as JSON string too.


Solution

  • Much simpler, this answer on WCF + REST: Where is the request data? works fine.

    Also, if your request body is deserializable, you can just pass a class. Barring some typos, this should work:

    public class Banana
    {
        public string Colour;
        public int Size;
    }
    

    ...

    [WebInvoke(
        Method = "POST", 
        UriTemplate = "bananas", 
        ResponseFormat=WebMessageFormat.Json, 
        RequestFormat=WebMessageFormat.Json)]
    string CreateBanana(Banana banana);
    

    ...

    public string CreateBanana(Banana banana)
    {
        return "It's a " + banana.Colour + " banana!";
    }
    

    Doing POST with data {"Colour": "blue", "Size": 5} to this resource should return "It's a blue banana!".