Canonical
Wie kann ich mit der Methode eine HTTP-Anfrage stellen und einige Daten sendenPOST
?
Ich kann eine GET
Anfrage stellen, habe aber keine Ahnung, wie ich eine POST
Anfrage stellen soll.
quelle
Canonical
Wie kann ich mit der Methode eine HTTP-Anfrage stellen und einige Daten sendenPOST
?
Ich kann eine GET
Anfrage stellen, habe aber keine Ahnung, wie ich eine POST
Anfrage stellen soll.
Es gibt verschiedene Möglichkeiten, HTTP GET
und POST
Anforderungen auszuführen :
Erhältlich in: .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
Dies ist derzeit der bevorzugte Ansatz und ist asynchron und leistungsstark. Verwenden Sie in den meisten Fällen die integrierte Version, aber für sehr alte Plattformen gibt es ein NuGet-Paket .
using System.Net.Http;
Es wird empfohlen , eine HttpClient
für die Lebensdauer Ihrer Anwendung zu instanziieren und zu teilen, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun.
private static readonly HttpClient client = new HttpClient();
Siehe HttpClientFactory
für eine Abhängigkeitsinjektionslösung .
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;
Es handelt sich um eine neuere Bibliothek mit einer fließenden API, die Testhilfen testet, HttpClient unter der Haube verwendet und portabel ist. Es ist über NuGet erhältlich .
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();
Erhältlich in: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. In .NET Core dient dies hauptsächlich der Kompatibilität - es wird umbrochen HttpClient
, ist weniger leistungsfähig und erhält keine neuen Funktionen.
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();
Dies ist ein Wrapper herum HttpWebRequest
. Vergleiche mitHttpClient
.
Erhältlich in: .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()
Einfache GET-Anfrage
Einfache POST-Anfrage
quelle
MSDN hat eine Probe.
quelle
Dies ist ein vollständiges Arbeitsbeispiel für das Senden / Empfangen von Daten im JSON-Format. Ich habe Visual Studio 2013 Express Edition verwendet:
quelle
Hier gibt es einige wirklich gute Antworten. Lassen Sie mich eine andere Methode zum Festlegen Ihrer Header mit dem WebClient () veröffentlichen. Ich werde Ihnen auch zeigen, wie Sie einen API-Schlüssel festlegen.
quelle
Diese Lösung verwendet nur Standard-.NET-Aufrufe.
Geprüft:
Referenz:
Code:
So rufen Sie ohne Parameter auf (verwendet ein "GET" hinter den Kulissen):
So rufen Sie mit Parametern auf (verwendet einen "POST" hinter den Kulissen):
quelle
Einfache Lösung (einzeilig, keine Fehlerprüfung, kein Warten auf Antwort), die ich bisher gefunden habe:
Mit Vorsicht verwenden!
quelle
Wenn Sie den Windows.Web.Http- Namespace verwenden, schreiben wir für POST anstelle von FormUrlEncodedContent HttpFormUrlEncodedContent. Die Antwort ist auch der Typ HttpResponseMessage. Der Rest ist, wie Evan Mulawski niedergeschrieben hat.
quelle
Wenn Sie eine fließende API mögen, können Sie Tiny.RestClient verwenden . Es ist bei NuGet erhältlich .
quelle
Warum ist das nicht ganz trivial? Das Ausführen der Anforderung ist nicht und insbesondere nicht mit den Ergebnissen verbunden und es scheint, dass auch einige .NET-Fehler beteiligt sind - siehe Fehler in HttpClient.GetAsync sollte WebException auslösen, nicht TaskCanceledException
Am Ende hatte ich diesen Code:
Dies führt dazu, dass ein GET oder POST davon abhängt, ob
postBuffer
null ist oder nichtWenn Erfolg wahr ist, wird die Antwort in sein
ResponseAsString
wenn Erfolg falsch ist , können Sie zu überprüfen
WebExceptionStatus
,HttpStatusCode
undResponseAsString
zu versuchen , um zu sehen , was falsch gelaufen ist .quelle
In .net Core können Sie nach dem Anruf folgenden Code verwenden. Hier habe ich diesem Code einige zusätzliche Funktionen hinzugefügt, damit Ihr Code hinter einem Proxy und gegebenenfalls mit Netzwerkanmeldeinformationen funktioniert. Auch hier erwähne ich, dass Sie die Codierung von ändern können deine Nachricht. Ich hoffe das erklärt alles und hilft dir beim Codieren.
quelle