2009-09-22 11 views
7

Was ich hier zu tun versuche, ist eine Post-Anfrage an Rest webserivce mit XML-Daten.Wie rufe ich Rest Webserivce mit einer Post-Methode auf und sende XML-Daten in C#

das ist, was ich jetzt habe, aber ich bin nicht sicher, wie meine XML-Daten

  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()); 

Antwort

5

Es gibt nichts grundlegend falsch mit dem, was man‘ re tun, aber Sie müssen den Request Stream Writer bündig/schließen. Dies kann leicht mit dem using Konstrukt wie die Anordnung des Schreibers erfolgen spült es auch:

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

Sie müssen dann GetResponse rufen, um tatsächlich die Anfrage ausführen:

req.GetResponse() 

(Beachten Sie, dass die HttpWebResponse zurück aus das ist auch wegwerfbar, also vergessen Sie nicht, auch das zu entsorgen.)

6

ich die WebClient-Klasse verwenden, weitergeben müssen:

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

Ich würde vorschlagen, den WebClient am Anfang der using-Anweisung zu definieren. Auf diese Weise ist der Name webClient lokal für den using-Block und es besteht kein Risiko, Methoden auf dem webClient aufzurufen, nachdem dieser entfernt wurde. – ctford

Verwandte Themen