2013-05-01 65 views
0
Dim doc As New XmlDocument 
doc.Load("http://www.example.com/?paramx=1&paramy=2") 

非常適合查詢字符串中的GET查詢。但是說我想POST paramx = 1 & paramy = 2到http://www.example.com並獲得XML中的響應。我會怎麼做?將數據POST到XML服務aspx vb

+0

您將需要使用HttpWebRequest和響應我猜。很好的示例在這裏:http://p2p.wrox.com/asp-net-1-0-1-1-professional/57098-c-post-xml-using-httpwebrequest-response.html – Yeronimo 2013-05-01 11:04:14

+0

如果你問如何從HTML發佈並獲得XML響應,您可以使用表單方法POST提交或AJAX發佈。在服務器端,您可能會使用Yeronimo所說的,因爲我不在ASP.NET中。 – IndoKnight 2013-05-01 11:14:25

+0

偉大的@yeromino我在尋找的關鍵詞是「httpwebrequest」,這裏有很多關於vb的教程,你的例子是針對c#的,但這很酷。謝謝。 – bendecko 2013-05-01 11:21:58

回答

0

下面是一個輔助類,我用於將數據發佈到網站,然後返回XML - 希望它有幫助。

用法:

var resultXmlDoc = new HttpHelper().PostXml("http://www.test.com", new { paramName = "value", paramName2="value2" }); 

Helper類:

internal class HttpHelper 
{ 

    public XDocument PostXml(string baseUrl, IDictionary<string, string> cgiParams) 
    { 
     return XDocument.Load(Post(baseUrl, cgiParams).GetResponseStream()); 
    } 

    public XDocument PostXml(string baseUrl, params object[] items) 
    { 
     return XDocument.Load(Post(baseUrl, items).GetResponseStream()); 
    } 

    public XDocument PostXml(string url, string topost) 
    { 
     return XDocument.Load(Post(url, topost).GetResponseStream()); 
    } 

     protected virtual HttpWebResponse Post(string url, string postString) 
     { 
      if (url == null) 
       throw new ArgumentNullException("baseUrl"); 

      Uri uri; 
      if (!Uri.TryCreate(url, UriKind.Absolute, out uri)) 
       throw new ArgumentException("url is not a valid Uri"); 


      var req = (HttpWebRequest)WebRequest.Create(url); 
      // if the target site issues a session cookie, you need to store it and append it here 
      req.ContentType = "application/x-www-form-urlencoded"; 
      req.Method = "POST"; 
      var bytes = System.Text.Encoding.ASCII.GetBytes(postString); 
      req.ContentLength = bytes.Length; 

      using(var str = req.GetRequestStream()) 
       str.Write(bytes, 0, bytes.Length); 


      return (HttpWebResponse)req.GetResponse(); 
     } 

     protected virtual HttpWebResponse Post(string url, params object[] items) 
     { 
      var x = items.SelectMany(i => 
      { 
       return i.GetType().GetProperties().Select(p => new Tuple<string, string>(p.Name, p.GetValue(i, null) != null ? p.GetValue(i, null).ToString() : "")); 
      }); 

      var d = new Dictionary<string, string>(); 
      foreach (var p in x) 
       d[p.Item1] = p.Item2; 

      return Post(url, d); 
     } 


     protected virtual HttpWebResponse Post(string baseUrl, IDictionary<string, string> cgiParams) 
     { 
      if (baseUrl == null) 
       throw new ArgumentNullException("baseUrl"); 

      Uri uri; 
      if (!Uri.TryCreate(baseUrl, UriKind.Absolute, out uri)) 
       throw new ArgumentException("baseUrl is not a valid Uri"); 


      string postString = string.Empty; 
      if (cgiParams != null && cgiParams.Count > 0) 
      { 
       foreach (var k in cgiParams.Keys) 
        postString += HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(cgiParams[k]) + "&"; 

       postString = postString.Substring(0, postString.Length - 1); 
      } 

      return Post(baseUrl, postString); 
     } 
}