2009-09-22 8 views
7

Ce que j'essaie de faire ici est de faire une demande de publication à Rest Webserivce avec des données xml.Comment appeler Rest Webserivce avec une méthode de post et envoyer des données xml en C#

ce que j'ai en ce moment, mais je ne suis pas sûr de savoir comment passer mes données xml

  XElement xml = new XElement("MatchedOptions", 
       from m in _matchedOptionsList 
       select new XElement("Listing", 
         new XElement("DomainID", _trafficCopInputs.DomainID), 
         new XElement("AdSource", _trafficCopInputs.AdSource), 
         new XElement("Campaign", _trafficCopInputs.Campaign), 
         new XElement("AdGroup", _trafficCopInputs.AdGroup), 
         new XElement("RedirectURL", m.RedirectPath), 
         new XElement("FunnelKeyword", m.FunnelKeyword))); 

      HttpWebRequest req = WebRequest.Create("http://something.com/") 
       as HttpWebRequest; 


      req.Method = "POST"; 
      req.ContentType = "text/xml"; 
      req.ContentLength = 0; 
      StreamWriter writer = new StreamWriter(req.GetRequestStream()); 
      writer.WriteLine(xml.ToString()); 

Répondre

5

Il n'y a rien de fondamentalement mauvais dans ce que vous » re faire, mais vous devez vider/fermer l'écrivain de flux de demande. Cela peut être fait facilement avec la using construction comme l'élimination de l'écrivain débusque aussi:

using (StreamWriter writer = new StreamWriter(req.GetRequestStream())) 
{ 
    writer.WriteLine(xml.ToString()); 
} 

Vous devez ensuite appeler GetResponse pour exécuter réellement la demande:

req.GetResponse() 

(Notez que les HttpWebResponse sont revenus de ceci est également jetable, donc n'oubliez pas de le faire aussi.)

6

J'utilise la classe WebClient:

WebClient webClient = new WebClient(); 
using (webClient) 
{ 
    requestInterceptor.OnRequest(webClient); 
    var enc = new ASCIIEncoding(); 
    return enc.GetString(webClient.UploadData(uri, enc.GetBytes(dataAsString))); 
} 
+8

Je suggère de définir le WebClient en haut de l'instruction using. De cette façon, le nom webClient est local pour le bloc using et il n'y a aucun risque d'appeler des méthodes sur webClient après qu'il a été éliminé. – ctford