Can't find how to use HttpContent

296,185

Solution 1

Just use...

var stringContent = new StringContent(jObject.ToString());
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Or,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Solution 2

To take 6footunder's comment and turn it into an answer, HttpContent is abstract so you need to use one of the derived classes:

enter image description here

Solution 3

For JSON Post:

var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Non-JSON:

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("field1", "value1"),
    new KeyValuePair<string, string>("field2", "value2"),
});
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

https://blog.pedrofelix.org/2012/01/16/the-new-system-net-http-classes-message-content/

Solution 4

While the final version of HttpContent and the entire System.Net.Http namespace will come with .NET 4.5, you can use a .NET 4 version by adding the Microsoft.Net.Http package from NuGet

Share:
296,185

Related videos on Youtube

user1416156
Author by

user1416156

Updated on July 23, 2020

Comments

  • user1416156
    user1416156 almost 4 years

    I am trying to use HttpContent:

    HttpContent myContent = HttpContent.Create(SOME_JSON);
    

    ...but I am not having any luck finding the DLL where it is defined.

    First, I tried adding references to Microsoft.Http as well as System.Net, but neither is in the list. I also tried adding a reference to System.Net.Http but the HttpContent class is not available.

    So, can anyone tell me where I can find the HttpContent class?

  • micahhoover
    micahhoover about 9 years
    Says the content parameter needs to be IHttpContent and not StringContent. When I cast it to the interface it's happy, though.
  • micahhoover
    micahhoover about 9 years
    Ended up using HttpStringContent. I couldn't use the StringContent class because PostAsync (or PutAsync in my case) doesn't accept StringContent even if you cast it to a IHttpContent object.
  • Arin
    Arin almost 7 years
    Looks like he used Visual Studio's "Class Diagram" feature (Right-click your project, Add Item, Class Diagram. Then you can go thru Solution Explorer and expand References to get diagrams of libraries you reference.) docs.microsoft.com/en-us/visualstudio/ide/…
  • Chris Koester
    Chris Koester over 6 years
    StringContent works for me with PostAsync, but if you want or need to use HttpContent, you can do so like this: HttpContent content = new StringContent(jsonString);
  • Slagmoth
    Slagmoth almost 5 years
    I keep seeing this answer to what appears to be a similar problem to mine, however as I debug through both of my APIs, I get a PostAsync("path", StringContent) to fire but when it hits the other API I don't have a body to parse and use and on return I get a 500... I am at a loss as it appears I am doing it just like this. Only difference is that I don't serialize the object as it is already serialized when I receive it in the first API and it is a simple passthrough.
  • DanielV
    DanielV over 4 years
    This should be the answer :/
  • Joe
    Joe almost 4 years
    I'm trying to use your "non-json" example, how should I read the data on the receiving end?
  • Felipe Deveza
    Felipe Deveza almost 4 years
    var contents = await response.Content.ReadAsStringAsync();
  • Robin Gupta
    Robin Gupta over 2 years
    @Chris, Please explain how you generated this class diagram for HttpContent...
  • Oak_3260548
    Oak_3260548 over 2 years
    @DanielV No, that should not be an answer to question 'Can't find how to use HttpContent' without explaining anything.