Canonical
How can I make an HTTP request and send some data using thePOSTmethod?
I can do a GET request, but I have no idea of how to make a POST request.
C# GET request with HttpClient HttpClient provides a base class for sending HTTP requests and receiving HTTP responses from a resource identified by a URI. using var client = new HttpClient(); var content = await client. GetStringAsync("http://webcode.me"); Console. WriteLine(content);
You cannot make a POST request by using a web browser, as web browsers only directly support GET requests.
There are several ways to perform HTTP GET and POST requests:
Available in: .NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+ .
It is currently the preferred approach, and is asynchronous and high performance. Use the built-in version in most cases, but for very old platforms there is a NuGet package.
using System.Net.Http; It is recommended to instantiate one HttpClient for your application's lifetime and share it unless you have a specific reason not to.
private static readonly HttpClient client = new HttpClient(); See HttpClientFactory for a dependency injection solution.
POST
var values = new Dictionary<string, string> { { "thing1", "hello" }, { "thing2", "world" } }; var content = new FormUrlEncodedContent(values); var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content); var responseString = await response.Content.ReadAsStringAsync(); GET
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx"); RestSharp
POST
var client = new RestClient("http://example.com"); // client.Authenticator = new HttpBasicAuthenticator(username, password); var request = new RestRequest("resource/{id}"); request.AddParameter("thing1", "Hello"); request.AddParameter("thing2", "world"); request.AddHeader("header", "value"); request.AddFile("file", path); var response = client.Post(request); var content = response.Content; // Raw content as string var response2 = client.Post<Person>(request); var name = response2.Data.Name; Flurl.Http
It is a newer library sporting a fluent API, testing helpers, uses HttpClient under the hood, and is portable. It is available via NuGet.
using Flurl.Http; POST
var responseString = await "http://www.example.com/recepticle.aspx" .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" }) .ReceiveString(); GET
var responseString = await "http://www.example.com/recepticle.aspx" .GetStringAsync(); Available in: .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+. In .NET Core, it is mostly for compatibility -- it wraps HttpClient, is less performant, and won't get new features.
using System.Net; using System.Text; // For class Encoding using System.IO; // For StreamReader POST
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx"); var postData = "thing1=" + Uri.EscapeDataString("hello"); postData += "&thing2=" + Uri.EscapeDataString("world"); var data = Encoding.ASCII.GetBytes(postData); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } var response = (HttpWebResponse)request.GetResponse(); var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); GET
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx"); var response = (HttpWebResponse)request.GetResponse(); var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); This is a wrapper around HttpWebRequest. Compare with HttpClient.
Available in: .NET Framework 1.1+, NET Standard 2.0+, .NET Core 2.0+.
In some circumstances (.NET Framework 4.5-4.8), if you need to do a http request synchronously, WebClient can still be used.
using System.Net; using System.Collections.Specialized; POST
using (var client = new WebClient()) { var values = new NameValueCollection(); values["thing1"] = "hello"; values["thing2"] = "world"; var response = client.UploadValues("http://www.example.com/recepticle.aspx", values); var responseString = Encoding.Default.GetString(response); } GET
using (var client = new WebClient()) { var responseString = client.DownloadString("http://www.example.com/recepticle.aspx"); } Simple GET request
using System.Net; ... using (var wb = new WebClient()) { var response = wb.DownloadString(url); } Simple POST request
using System.Net; using System.Collections.Specialized; ... using (var wb = new WebClient()) { var data = new NameValueCollection(); data["username"] = "myUser"; data["password"] = "myPassword"; var response = wb.UploadValues(url, "POST", data); string responseInString = Encoding.UTF8.GetString(response); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With