Kanoniczny
Jak mogę złożyć żądanie HTTP i wysłać dane przy użyciu tejPOST
metody?
Mogę GET
złożyć wniosek, ale nie mam pojęcia, jak go złożyć POST
.
źródło
Kanoniczny
Jak mogę złożyć żądanie HTTP i wysłać dane przy użyciu tejPOST
metody?
Mogę GET
złożyć wniosek, ale nie mam pojęcia, jak go złożyć POST
.
Istnieje kilka sposobów wykonywania HTTP GET
i POST
żądań:
Dostępny w: .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
Jest to obecnie preferowane podejście, asynchroniczne i o wysokiej wydajności. W większości przypadków używaj wersji wbudowanej, ale w przypadku bardzo starych platform istnieje pakiet NuGet .
using System.Net.Http;
Zaleca się utworzenie instancji HttpClient
przez cały okres użytkowania aplikacji i udostępnienie jej, chyba że masz konkretny powód, aby tego nie robić.
private static readonly HttpClient client = new HttpClient();
Zobacz HttpClientFactory
na wtrysku zależność rozwiązania.
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;
Jest to nowsza biblioteka z płynnym API, testująca pomocników, używa HttpClient pod maską i jest przenośna. Jest dostępny za pośrednictwem 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();
Dostępny w: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. W .NET Core jest głównie kompatybilny - pakuje się HttpClient
, jest mniej wydajny i nie otrzyma nowych funkcji.
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();
To jest opakowanie HttpWebRequest
. Porównaj zHttpClient
.
Dostępny w: .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()
Proste żądanie GET
Proste żądanie POST
źródło
MSDN ma próbkę.
źródło
To jest kompletny działający przykład wysyłania / odbierania danych w formacie JSON, użyłem Visual Studio 2013 Express Edition:
źródło
Oto kilka naprawdę dobrych odpowiedzi. Pozwól, że opublikuję inny sposób ustawiania nagłówków za pomocą WebClient (). Pokażę też, jak ustawić klucz API.
źródło
To rozwiązanie wykorzystuje wyłącznie standardowe wywołania platformy .NET.
Przetestowany:
Odniesienie:
Kod:
Aby zadzwonić bez parametrów (używa „GET” za sceną):
Aby wywołać z parametrami (używa „POST” za scenami):
źródło
Proste rozwiązanie (jedno-liniowe, bez sprawdzania błędów, bez oczekiwania na odpowiedź) Znalazłem do tej pory:
Używaj ostrożnie!
źródło
Podczas korzystania z przestrzeni nazw Windows.Web.Http dla POST zamiast FormUrlEncodedContent piszemy HttpFormUrlEncodedContent. Odpowiedź jest również typem HttpResponseMessage. Reszta jest, jak napisał Evan Mulawski.
źródło
Jeśli lubisz płynne API, możesz użyć Tiny.RestClient . Jest dostępny w NuGet .
źródło
Dlaczego nie jest to całkowicie trywialne? Wykonanie żądania nie jest, a zwłaszcza nie dotyczy wyników, i wydaje się, że w grę wchodzi również kilka błędów .NET - zobacz Błąd w HttpClient.GetAsync powinien zgłosić wyjątek WebException, a nie TaskCanceledException
Skończyło się na tym kodzie:
Spowoduje to wykonanie instrukcji GET lub POST, jeśli
postBuffer
ma wartość zero lub niejeśli sukces jest prawdziwy, odpowiedź będzie dostępna
ResponseAsString
Sukces jeśli jest fałszywe, można sprawdzić
WebExceptionStatus
,HttpStatusCode
iResponseAsString
spróbować zobaczyć, co poszło źle.źródło
W rdzeniu .net możesz wykonać połączenie po zakończeniu z następującym kodem, tutaj dodałem kilka dodatkowych funkcji do tego kodu, dzięki czemu Twój kod może działać za serwerem proxy i poświadczeniami sieci, jeśli takie istnieją, tutaj również wspominam, że możesz zmienić kodowanie Twoja wiadomość. Mam nadzieję, że to wszystko wyjaśni i pomoże ci w kodowaniu.
źródło