iosjsonasiformdatarequestmedia-type

Unsupported Media Type Error - Posting json from iPhone app


I am trying to produce json in the following form and post it to server:

{
"items":  [
 {
  "id": "3",
  "quantity": 0.5,
  "unit": "2"
 } ]
}

I am posting data using ASIFormDataRequest. I have escaped json string in order to send it in url as request parameter

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://api.esha.com/analysis?items=%@&apikey=%@",encodeJson,ApiKey]];
//here i have send escaped json (do I really need to do this thing?)

_request = [ASIFormDataRequest requestWithURL:url];
[_request setPostValue:jsonString forKey:@"items"]; //original json string
[_request setPostValue:ApiKey forKey:@"apikey"];
[_request setRequestMethod:@"POST"];
[_request addRequestHeader:@"Content-Type" value:@"application/json"];
[_request setDelegate:self];
_request.timeOutSeconds = 60.0; 
[_request startSynchronous];

In response, I am getting "Unsupported Media Type" error in HTML format:

<body>
<h1>HTTP Status 415 - Unsupported Media Type</h1>
<HR size="1" noshade="noshade"><p><b>type</b>
Status report</p><p><b>message</b>
<u>Unsupported Media Type</u></p>
<p><b>description</b> <u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Unsupported Media Type).</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.23</h3>
</body>

What mistake can I be doing? Can anyone guide me towards right path? Thanks.


Solution

  • Finally I solve myself. My mistake was that I was trying to post json(either encoded or what) in URL for request, while server may not have any method to support such request. Also I tried with ASIHTTPRequest, don't know why ASIFormRequest was not working. Now I am getting response.

    So I changed above code as:

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://api.esha.com/analysis?apikey=%@",ApiKey]];
    
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request addRequestHeader:@"Content-Type" value:@"application/json"];
    [request setPostBody:(NSMutableData *)[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    [request setDelegate:self];
    [request startSynchronous];