web-dev-qa-db-fra.com

Ajout d'en-têtes et de données de post dans la demande reposante / HTTP en C #

Je rencontre des problèmes d'envoi POST Demande en C # et il semble que j'ai mal compris certains bases HTTP. Donc, je mettant en œuvre le service RESTFULL client, qui fonctionne comme suit :

  1. Faire POST Demande avec nom d'utilisateur/mot de passe et obtenir jeton
  2. Utilisez ce jeton dans l'en-tête (Autorisation: jeton) tout en faisant d'autres demandes d'obtention/post/pose

J'utilise WebRequest pour faire des demandes d'obtenir (avec l'en-tête d'autorisation) et que cela fonctionne. Mais lorsque j'utilise le code suivant pour effectuer des demandes de vente, le service donne "l'échec de l'authentification - non connecté" message:

String url = String.Format("{0}/{1}", AN_SERVER, app);
WebRequest theRequest = WebRequest.Create(url);
theRequest.Method = "POST";

theRequest.ContentType = "text/x-json";
theRequest.ContentLength = json.Length;
Stream requestStream = theRequest.GetRequestStream();

requestStream.Write(Encoding.ASCII.GetBytes(json), 0, json.Length);
requestStream.Close();


theRequest.Headers.Add("Authorization", authToken);

HttpWebResponse response =  (HttpWebResponse)theRequest.GetResponse();

Je dois faire une erreur mineure (au moins j'espère donc) tout en envoyant POST Demande. Alors, que dois-je faire mal?

Merci.

19
Azho KG

Enfiler les en-têtes avant la requête Works Steam (selon le commentaire de AI W), car le flux de demande ajoute le corps.

La manière dont WebRequest est implémentée en interne, vous devez terminer l'en-tête avant d'écrire le corps et une fois que c'est au format de flux, il est prêt à envoyer.

Si vous examinez la mise en œuvre de WebRequest dans le réflecteur ou un tel outil de décompilation, vous pourrez voir la logique.

J'espère que cela t'aides

10
stevenrcfox