Anand
Anand

Reputation: 291

iPhone posting xml to ASP.net MVC webservices

Is it possible to POST XMLData to the webservices from iPhone OS. The webservices are developed in ASP.net MVC 3.0 with RESTFul url and we would like iPhone developers to send input data in XML format as POST variable..

The webservice actionresult looks like the following where sightings is the parameter that is expected to pass as POST variable

 public ActionResult Update(XDocument sightings)
 {
    try
    {
        XMLHelper xmlHelper = new XMLHelper();
    }
 }

Upvotes: 1

Views: 534

Answers (1)

Ahmad Kayyali
Ahmad Kayyali

Reputation: 8243

That's definitely applicable all you need to do is to use NSMutableURLRequest as the following:

NSString* sXMLToPost = @"<?xml version=\"1.0\"?><Name>user</Name>";

NSData* data = [sXMLToPost dataUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:@"http://myurl.com/RequestHandler.ashx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[sXMLToPost dataUsingEncoding:NSUTF8StringEncoding]];

NSURLResponse *response;
NSError *error;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

if (error) {
//handle the error
}

And Now in your ASHX file parse the InputStream to read the posted XML:

System.IO.Stream str; String strmContents;
Int32 counter, strLen, strRead;

str = Request.InputStream;

strLen = Convert.ToInt32(str.Length);

byte[] strArr = new byte[strLen];

strRead = str.Read(strArr, 0, strLen);

// Convert byte array to a text string.
strmContents = "";
for (counter = 0; counter < strLen; counter++)
{
    strmContents = strmContents + strArr[counter].ToString();            
}

Remember you can always check the request type using:

if (context.Request.RequestType == "POST")

MSDN HttpRequest.InputStream

Upvotes: 2

Related Questions