Canonical
Bagaimana saya bisa membuat permintaan HTTP dan mengirim beberapa data menggunakanPOST
metode ini?
Saya dapat melakukan GET
permintaan, tetapi saya tidak tahu bagaimana cara membuat POST
permintaan.
sumber
Canonical
Bagaimana saya bisa membuat permintaan HTTP dan mengirim beberapa data menggunakanPOST
metode ini?
Saya dapat melakukan GET
permintaan, tetapi saya tidak tahu bagaimana cara membuat POST
permintaan.
Ada beberapa cara untuk melakukan HTTP GET
dan POST
permintaan:
Tersedia dalam: .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
Saat ini pendekatan yang disukai, dan tidak sinkron dan berkinerja tinggi. Dalam kebanyakan kasus, gunakan versi bawaan , tetapi untuk platform yang sangat lama ada paket NuGet .
using System.Net.Http;
Disarankan untuk instantiate satu HttpClient
untuk seumur hidup aplikasi Anda dan membaginya kecuali Anda memiliki alasan khusus untuk tidak melakukannya.
private static readonly HttpClient client = new HttpClient();
Lihat HttpClientFactory
untuk solusi injeksi ketergantungan .
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");
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;
Ini adalah perpustakaan baru yang menggunakan API yang lancar, menguji bantuan, menggunakan HttpClient di bawah tenda, dan portabel. Ini tersedia melalui 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();
Tersedia dalam: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. Dalam .NET Core, sebagian besar untuk kompatibilitas - membungkus HttpClient
, kurang berkinerja, dan tidak akan mendapatkan fitur baru.
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();
Ini adalah pembungkus HttpWebRequest
. Bandingkan denganHttpClient
.
Tersedia dalam: .NET Framework 1.1+
, NET Standard 2.0+
,.NET Core 2.0+
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");
}
HttpWebResponse response = (HttpWebResponse)HttpWReq.GetResponse();
response.Result.Content.ReadAsStringAsync()
Permintaan GET sederhana
Permintaan POST sederhana
sumber
MSDN memiliki sampel.
sumber
Ini adalah contoh kerja lengkap mengirim / menerima data dalam format JSON, saya menggunakan Visual Studio 2013 Express Edition:
sumber
Ada beberapa jawaban yang sangat bagus di sini. Biarkan saya memposting cara berbeda untuk mengatur tajuk Anda dengan WebClient (). Saya juga akan menunjukkan kepada Anda bagaimana mengatur kunci API.
sumber
Solusi ini hanya menggunakan panggilan .NET standar.
Diuji:
Referensi:
Kode:
Untuk memanggil tanpa parameter (gunakan "GET" di belakang layar):
Untuk memanggil dengan parameter (menggunakan "POST" di belakang layar):
sumber
Solusi sederhana (satu garis, tanpa pengecekan kesalahan, tidak menunggu respons) yang saya temukan sejauh ini:
Gunakan dengan hati-hati!
sumber
Saat menggunakan namespace Windows.Web.Http , untuk POST alih-alih FormUrlEncodedContent kita menulis HttpFormUrlEncodedContent. Juga tanggapannya adalah tipe HttpResponseMessage. Sisanya adalah seperti yang ditulis Evan Mulawski.
sumber
Jika Anda menyukai API yang lancar, Anda dapat menggunakan Tiny.RestClient . Ini tersedia di NuGet .
sumber
Mengapa ini tidak sepenuhnya sepele? Melakukan permintaan tidak dan terutama tidak berurusan dengan hasil dan sepertinya ada beberapa. NET bug yang terlibat juga - lihat Bug di HttpClient.GetAsync harus membuang WebException, bukan TaskCanceledException
Saya berakhir dengan kode ini:
Ini akan melakukan GET atau POST tergantung apakah
postBuffer
itu nol atau tidakjika Sukses benar, maka responsnya akan masuk
ResponseAsString
jika Sukses salah Anda dapat memeriksa
WebExceptionStatus
,HttpStatusCode
danResponseAsString
untuk mencoba melihat apa yang salah.sumber
Di .net inti Anda dapat membuat panggilan-post dengan kode berikut, di sini saya menambahkan beberapa fitur tambahan untuk kode ini sehingga dapat membuat kode Anda bekerja di belakang proxy dan dengan kredensial jaringan jika ada, juga di sini saya menyebutkan bahwa Anda dapat mengubah pengkodean pesan Anda. Saya harap ini menjelaskan semuanya dan membantu Anda dalam pengkodean.
sumber