2009-09-22 23 views
7

我在这里要做的是发出请求以使用xml数据来保留webserivce。我如何使用post方法调用Rest Webserivce并在C中发送xml数据#

这就是我现在所拥有的,但我不知道怎么打发我的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()); 

回答

5

没有什么根本上的错误与你”重做,但你需要刷新/关闭请求流编写器。这可以通过using结构很容易做到的也处置作家冲吧:

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

然后,您需要调用GetResponse实际执行请求:

req.GetResponse() 

(注意:HttpWebResponse从返回这也是一次性的,所以不要忘了也这样处理。)

6

我使用WebClient类:

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

我建议在using语句的顶部定义WebClient。这样,webClient的名称就是使用块的本地名称,并且在处理webClient后不存在调用方法的风险。 – ctford 2009-09-22 17:19:18

相关问题