Skip to content

Instantly share code, notes, and snippets.

@leggetter
Created January 7, 2011 16:23
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save leggetter/769688 to your computer and use it in GitHub Desktop.
Save leggetter/769688 to your computer and use it in GitHub Desktop.
How to get the body of a HTTP Request using C#
private string GetDocumentContents(System.Web.HttpRequestBase Request)
{
string documentContents;
using (Stream receiveStream = Request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
documentContents = readStream.ReadToEnd();
}
}
return documentContents;
}
Copy link

ghost commented Oct 22, 2013

nice!

@mohammad786
Copy link

Thank you so much ... you saved my lots of time.

@Formalizer
Copy link

very nice snippet!

@Marklsq
Copy link

Marklsq commented Feb 15, 2017

Thank you,but how to get the full body has finished loading the JS code.

@bgurmendi
Copy link

You sould use the Request.ContentEncoding

private string GetDocumentContents(HttpRequestBase Request)
        {
            string documentContents;
            using (Stream receiveStream = Request.InputStream)
            {
                using (StreamReader readStream = new StreamReader(receiveStream, Request.ContentEncoding))
                {
                    documentContents = readStream.ReadToEnd();
                }
            }
            return documentContents;
        }

@tvcsharp
Copy link

I am using this code inside a specflow step definiton to capture the body of http request like below.
but I am getting error. Can anybody help?
binding error: Parameter count mismatch! The binding method 'TestFeature.WhenBrowserPayLoadIsExtracted(HttpRequestBase)' should have 0 parameters

[When(@"Browser payload is extracted")]
private string WhenBrowserPayLoadIsExtracted(HttpRequestBase Request)
{
string documentContents;
using (Stream receiveStream = Request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
documentContents = readStream.ReadToEnd();
}
}
return documentContents;

    }

@yushifeiyang
Copy link

thanks

@houseofcat
Copy link

houseofcat commented Apr 19, 2018

public async static Task<string> GetBodyContentAsStringAsync(HttpRequestBase request)
{
    string content = string.Empty;

    using (Stream receiveStream = request.InputStream)
    using (StreamReader readStream = new StreamReader(receiveStream, request.ContentEncoding))
    { content = await readStream.ReadToEndAsync(); }

    return content;
}

Thanks, and modernized.

Also, depending on your system this is avaliable:

var rawMessage = await Request.Content.ReadAsStringAsync();

@winperec
Copy link

You should be careful with disposing! if you look at native BinaryRead method - it uses InputStream as well but does not dispose it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment