Canonical
Comment puis-je faire une requête HTTP et envoyer des données en utilisant lePOST
méthode?
Je peux faire une GET
demande, mais je n'ai aucune idée de comment faire une POST
demande.
la source
Canonical
Comment puis-je faire une requête HTTP et envoyer des données en utilisant lePOST
méthode?
Je peux faire une GET
demande, mais je n'ai aucune idée de comment faire une POST
demande.
Il existe plusieurs façons d'effectuer HTTP GET
et des POST
requêtes:
Disponible en: .NET Framework 4.5+
, .NET Standard 1.1+
,.NET Core 1.0+
.
C'est actuellement l'approche préférée, elle est asynchrone et performante. Utilisez la version intégrée dans la plupart des cas, mais pour les très anciennes plates-formes, il existe un package NuGet .
using System.Net.Http;
Il est recommandé d'instancier un HttpClient
pour la durée de vie de votre application et de le partager, sauf si vous avez une raison spécifique de ne pas le faire.
private static readonly HttpClient client = new HttpClient();
Voir HttpClientFactory
pour une solution d' injection de dépendance .
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;
Il s'agit d'une bibliothèque plus récente dotée d'une API fluide, testant les assistants, utilise HttpClient sous le capot et est portable. Il est disponible 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();
Disponible en: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. Dans .NET Core, c'est principalement pour la compatibilité - il encapsule HttpClient
, est moins performant et n'obtiendra pas de nouvelles fonctionnalités.
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();
Ceci est un wrapper autour HttpWebRequest
. Comparez avecHttpClient
.
Disponible en: .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()
Demande GET simple
Demande POST simple
la source
MSDN a un échantillon.
la source
Ceci est un exemple de travail complet d'envoi / réception de données au format JSON, j'ai utilisé Visual Studio 2013 Express Edition:
la source
Il y a de très bonnes réponses ici. Permettez-moi de publier une manière différente de définir vos en-têtes avec WebClient (). Je vais également vous montrer comment définir une clé API.
la source
Cette solution n'utilise que des appels .NET standard.
Testé:
Référence:
Code:
Pour appeler sans paramètres (utilise un "GET" dans les coulisses):
Pour appeler avec des paramètres (utilise un "POST" dans les coulisses):
la source
Solution simple (une ligne, pas de vérification d'erreur, pas d'attente de réponse) que j'ai trouvée jusqu'à présent:
Utiliser avec précaution!
la source
Lorsque vous utilisez l' espace de noms Windows.Web.Http , pour POST au lieu de FormUrlEncodedContent, nous écrivons HttpFormUrlEncodedContent. La réponse est également le type de HttpResponseMessage. Le reste est comme l'a écrit Evan Mulawski.
la source
Si vous aimez une API fluide, vous pouvez utiliser Tiny.RestClient . Il est disponible sur NuGet .
la source
Pourquoi n'est-ce pas totalement trivial? Faire la demande n'est pas et surtout ne pas traiter les résultats et il semble que certains bogues .NET soient également impliqués - voir Bug dans HttpClient.GetAsync devrait lever WebException, pas TaskCanceledException
Je me suis retrouvé avec ce code:
Cela fera un GET ou POST dépend si
postBuffer
est nul ou nonsi le succès est vrai, la réponse sera alors
ResponseAsString
Si le succès est faux , vous pouvez vérifier
WebExceptionStatus
,HttpStatusCode
etResponseAsString
d'essayer de voir ce qui a mal tourné.la source
Dans le noyau .net, vous pouvez effectuer un post-appel avec le code suivant, ici j'ai ajouté quelques fonctionnalités supplémentaires à ce code afin que votre code puisse fonctionner derrière un proxy et avec des informations d'identification réseau le cas échéant, également ici, je mentionne que vous pouvez changer le codage de votre message. J'espère que cela explique tout et vous aide à coder.
la source