140 votes

Définition des données du corps d'une requête Web

Je suis en train de créer une requête web en ASP.NET et j'ai besoin d'ajouter un tas de données dans le corps. Comment dois-je m'y prendre ?

var request = HttpWebRequest.Create(targetURL);
request.Method = "PUT";
response = (HttpWebResponse)request.GetResponse();

119voto

Torbjörn Hansson Points 3816

Avec HttpWebRequest.GetRequestStream

Exemple de code tiré de http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx

string postData = "firstone=" + inputData;
ASCIIEncoding encoding = new ASCIIEncoding ();
byte[] byte1 = encoding.GetBytes (postData);

// Set the content type of the data being posted.
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";

// Set the content length of the string being posted.
myHttpWebRequest.ContentLength = byte1.Length;

Stream newStream = myHttpWebRequest.GetRequestStream ();

newStream.Write (byte1, 0, byte1.Length);

D'un de mes propres codes :

var request = (HttpWebRequest)WebRequest.Create(uri);
request.Credentials = this.credentials;
request.Method = method;
request.ContentType = "application/atom+xml;type=entry";
using (Stream requestStream = request.GetRequestStream())
using (var xmlWriter = XmlWriter.Create(requestStream, new XmlWriterSettings() { Indent = true, NewLineHandling = NewLineHandling.Entitize, }))
{
    cmisAtomEntry.WriteXml(xmlWriter);
}

try 
{    
    return (HttpWebResponse)request.GetResponse();  
}
catch (WebException wex)
{
    var httpResponse = wex.Response as HttpWebResponse;
    if (httpResponse != null)
    {
        throw new ApplicationException(string.Format(
            "Remote server call {0} {1} resulted in a http error {2} {3}.",
            method,
            uri,
            httpResponse.StatusCode,
            httpResponse.StatusDescription), wex);
    }
    else
    {
        throw new ApplicationException(string.Format(
            "Remote server call {0} {1} resulted in an error.",
            method,
            uri), wex);
    }
}
catch (Exception)
{
    throw;
}

0 votes

Bonjour Torbjorn, j'utilise la requête pour obtenir 'request.GetResponse();', dans l'exemple ci-dessus, comment cela fonctionne-t-il ?

0 votes

Lorsque vous appelez GetRequestStream(), il passe l'appel au serveur. Vous devez donc l'ajouter à la fin de l'exemple ci-dessus.

1 votes

Existe-t-il un moyen de voir le texte complet d'un objet de requête à des fins de débogage ? J'ai essayé de le sérialiser et d'utiliser un StreamReader, mais quoi que je fasse, je ne peux pas voir les données que je viens d'écrire dans la requête.

51voto

Evan Mulawski Points 28536

Mise à jour

Voir mes autres réponses à SO.


Original

var request = (HttpWebRequest)WebRequest.Create("https://example.com/endpoint");

string stringData = ""; // place body here
var data = Encoding.Default.GetBytes(stringData); // note: choose appropriate encoding

request.Method = "PUT";
request.ContentType = ""; // place MIME type here
request.ContentLength = data.Length;

var newStream = request.GetRequestStream(); // get a ref to the request body so it can be modified
newStream.Write(data, 0, data.Length);
newStream.Close();

0 votes

Il vous manque quelque chose ? Comme httpWReq.Content = newStream ; vous n'utilisez pas votre objet newStream avec votre webRequest.

4 votes

Pour répondre à la question de @Yogurtu par souci d'exhaustivité, la Stream objet qui newStream pointe vers écrit directement dans le corps de la requête. Il est accessible par l'appel à HttpWReq.GetRequestStream() . Il n'est pas nécessaire de définir autre chose sur la demande.

9voto

real_yggdrasil Points 352

Les réponses à ce sujet sont toutes excellentes. Cependant, j'aimerais en proposer une autre. Il est fort probable que l'on vous ait donné une api et que vous souhaitiez l'intégrer à votre projet C#. En utilisant Postman, vous pouvez configurer et tester l'appel à l'API et une fois qu'il s'exécute correctement, vous pouvez simplement cliquer sur 'Code' et la requête sur laquelle vous avez travaillé est écrite dans un snippet c#. comme ceci :

var client = new RestClient("https://api.XXXXX.nl/oauth/token");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic   N2I1YTM4************************************jI0YzJhNDg=");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "password");
request.AddParameter("username", "development+XXXXXXXX-admin@XXXXXXX.XXXX");
request.AddParameter("password", "XXXXXXXXXXXXX");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

Le code ci-dessus dépend du paquet nuget RestSharp, que vous pouvez facilement installer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X