2015-03-08 144 views
0

我试图发送一个xml请求到一个url并且响应也将是一个xml响应。我知道如何从MVC应用程序中调用服务端点,但我不知道如何调用此URL以及如何阅读它将使我回馈的内容。这是我迄今为止所拥有的。这是正确的方向吗?发送xml请求到url并收到xml响应

请求:

<CityStateLookupRequest USERID=”xxxxxxxx”> 
<ZipCode ID="0"> 
<Zip5>90210</Zip5> 
</ZipCode> 
</CityStateLookupRequest> 

响应:

<CityStateLookupResponse> 
<ZipCode ID="0"> 
<Zip5>90210</Zip5> 
<City>BEVERLY HILLS</City> 
<State>CA</State> 
</ZipCode> 
</CityStateLookupResponse> 

C#代码:

var xmlRequest = new XElement("CityStateLookupRequest", 
       new XAttribute("USERID", "XXXXXXXXX"), 
       new XElement("ZipCode", 
        new XAttribute("ID", "0"), 
        new XElement("Zip5", "43065")));  

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(" http://production.shippingapis.com/ShippingAPI.dll"); 

byte[] bytes = System.Text.Encoding.ASCII.GetBytes(xmlRequest.ToString()); 
request.ContentType = "text/xml; encoding='utf-8'"; 
request.ContentLength = bytes.Length; 
request.Method = "POST"; 
Stream requestStream = request.GetRequestStream(); 
requestStream.Write(bytes, 0, bytes.Length); 
requestStream.Close(); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

if (response.StatusCode == HttpStatusCode.OK) 
{ 
    var xmlDoc = new XmlDocument(); 

    xmlDoc.Load(response.GetResponseStream()); 
} 

回答

0

这里是你能做到这一点,这基本上是一个表格后一种方式。

var xmlRequest = new XElement("CityStateLookupRequest", 
    new XAttribute("USERID", "XXXXXXXXX"), 
    new XElement("ZipCode", 
     new XAttribute("ID", "0"), 
     new XElement("Zip5", "43065"))); 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://production.shippingapis.com/ShippingAPI.dll");   

// parameters to post - other end expects API and XML parameters 
var postData = new List<KeyValuePair<string, string>>(); 
postData.Add(new KeyValuePair<string, string>("API", "CityStateLookup")); 
postData.Add(new KeyValuePair<string, string>("XML", xmlRequest.ToString()));  

// assemble the request content form encoded (reference System.Net.Http) 
HttpContent content = new FormUrlEncodedContent(postData); 

// indicate what we are posting in the request 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = content.Headers.ContentLength.Value; 
content.CopyToAsync(request.GetRequestStream()).Wait();       

// get response 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

if (response.StatusCode == HttpStatusCode.OK) 
{ 
    // as an xml: deserialise into your own object or parse as you wish 
    var responseXml = XDocument.Load(response.GetResponseStream()); 
    Console.WriteLine(responseXml.ToString()); 
} 
+0

谢谢你,这是我需要的。 – NNassar 2015-03-11 13:17:26