2017-01-31 1 views
0

J'ai un objet httpWebRequest.Comment envoyer correctement json avec httpWebRequest?

Il est initialisées comme ceci:

 var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://myURL.com"); // This is actually my company URL I can't show 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 

Ensuite, je veux envoyer à cette URL données JSON. Après essais, je me suis dit que je fais mal, mais je ne comprends pas ce qu'elle est ... Voici où je l'envoie données:

 using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      List<string> datas = new List<string>(); 
      datas.Add("1"); 


      string json = Newtonsoft.Json.JsonConvert.SerializeObject(datas); 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
      streamWriter.Close(); 
     } 

Il ne semble pas fonctionner. Y a-t-il un moyen d'attraper l'URL que j'envoie? J'ai essayé Fiddler, mais je ne vois pas ma demande.

également ce code fonctionne avec une console de chrome:

jQuery.ajax({ 
       'url': 'http://myURL.com', 
       'type': 'POST', 
       'data': {data:[7]}, 
       'success': function (data) { 
        console.log(data); 
       } 
      }); 
+0

Vous envoyez à '" http: // myURL "' l'URL que vous avez transmise à la fonction Create. Peut-être que vous voulez dire "le contenu"? Cet article peut être utile pour tracer le problème: https://blogs.msdn.microsoft.com/benjaminperkins/2014/05/05/using-network-tracing-to-debug-system-net-based-issues/ – Gusman

+0

l'URL n'est en fait pas celle-ci et si ça va, je l'ai testé. Je vais éditer mon code – Cher

+0

Oui, je comprends que ce n'est pas votre véritable URL, ce que je voulais dire, c'est que vous appelez à tout ce que vous avez passé à la fonction 'Create'. – Gusman

Répondre

1

À partir du code que vous utilisez à Chrome, il est noté votre structure de données ne sont pas correctes.

D'abord, vous avez besoin d'une classe pour stocker les données, permet de l'appeler DataHolder:

public class DataHolder 
{ 
    public int[] data { get; set; } 
} 

Alors maintenant, vous devez remplir:

var newData = new DataHolder{ data = new int[] { 1 } }; 

Et maintenant, vous pouvez sérialiser et devrait fonctionner:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(newData); 

EDIT: comme une note, dans une question précédente, vous vous avez posté essayé d'envoyer "{ data: [1] }" qui est incorrect, il devrait être "{ \"data\": [1] }" mais mieux s'en tenir à une classe avec la structure correcte et laisser le sérialiseur s'occuper de ces détails d'implémentation.