2

I'm trying to send an xml request to a url and the response will also be an xml response. I know how to call a service endpoint from an MVC application but I'm not sure how to call this url and how to read what it will give me back. This is what I have so far. Is this in the right direction?

Request:

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

Response:

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

C# Code:

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

1 Answer 1

3

Here is one way you could do this, which is basically a form post.

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());
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.