Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing RestKit iOS to POST object to MVC4 webapi not seeing json object
    text
    copied!<p>trying to call ASP.NET 4 Web API from iOS using RestKit but the serialised json object doesn't get recognised on the server command. Can anyone help?</p> <p>obj C class;</p> <pre><code> #import "NoddyModel.h" @synthesize messageId; @synthesize message; @end </code></pre> <p>(the above are NSStrings)</p> <p>equiv C# from the mvc services;</p> <pre><code>using Core.MessageDocuments; namespace WebApi.Models { [DataContract] public class NoddysModel : List&lt;NoddyModel&gt; { [DataMember(IsRequired = true)] public long NumberOfMessages { get { return Count; } } } [DataContract] public class NoddyModel { public NoddyModel(string MessageId, string Message) { MessageId = MessageId; Message = Message; } [DataMember] public string MessageId { get; set; } [DataMember] public string Message { get; set; } } } </code></pre> <p>and the mvc command;</p> <pre><code>// POST api/Noddy [HttpPost] public MessagesPostResponse Post(NoddyModel noddy) { int count = 999; try { count = noddy.Message.Length + 9000; } catch (Exception e) { FileStream traceLog = new FileStream("C:\\logs\\Traces.svclog", FileMode.Append); TextWriterTraceListener myListener = new TextWriterTraceListener(traceLog); Trace.Listeners.Add(myListener); myListener.WriteLine("Exception in POST NoddyModel calc count = " + e.Message + " response = " + HttpContext.Current.Request.Params.ToString()); Trace.Flush(); myListener.Flush(); traceLog.Close(); return new MessagesPostResponse(false, 0); } try { FileStream traceLog = new FileStream("C:\\logs\\Traces.svclog", FileMode.Append); TextWriterTraceListener myListener = new TextWriterTraceListener(traceLog); Trace.Listeners.Add(myListener); myListener.WriteLine("Sending trace information : Noddy = " + noddy); Trace.Flush(); myListener.Flush(); traceLog.Close(); return new MessagesPostResponse(true, count); } catch (Exception e) { FileStream traceLog = new FileStream("C:\\logs\\Traces.svclog", FileMode.Append); TextWriterTraceListener myListener = new TextWriterTraceListener(traceLog); Trace.Listeners.Add(myListener); myListener.WriteLine("Exception in POST NoddyModel = " + e.Message); Trace.Flush(); myListener.Flush(); traceLog.Close(); return new MessagesPostResponse(false, 0); } } </code></pre> <p>and the Obj C function;</p> <pre><code>RKURL *baseURL = [RKURL URLWithString: @"http://ServerX/cirrusdev/api"]; RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURLString: @"http://ServerX/cirrusdev/api"]; objectManager.client.baseURL = baseURL; [objectManager setSerializationMIMEType:RKMIMETypeJSON]; RKObjectRouter *dynrouter = [RKObjectRouter new]; [dynrouter routeClass:[NoddyModel class] toResourcePath:@"/messages" forMethod:RKRequestMethodPOST]; objectManager.router = dynrouter; RKObjectMapping* pmsg = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; [pmsg mapKeyPath: @"MessageId" toAttribute:@"messageId" ]; [pmsg mapKeyPath: @"Message" toAttribute:@"message" ]; RKObjectMapping* pmsgSerializeMapping = [pmsg inverseMapping]; [objectManager.mappingProvider setSerializationMapping:pmsgSerializeMapping forClass:[NoddyModel class]]; NoddyModel *msg = [[NoddyModel alloc]init]; msg.messageId =@"abc999"; msg.message = @"Hello Cirrus"; [objectManager postObject:msg delegate:self]; </code></pre> <p>and the log from RestKit;</p> <pre class="lang-none prettyprint-override"><code>&gt; 2012-10-31 15:28:26.851 ELOI[74400:c07] D &gt; restkit.network:RKClient.m:437 Reachability to host '0.0.0.0' &gt; determined for client &lt;RKClient: 0x76dda50&gt;, unsuspending queue &gt; &lt;RKRequestQueue: 0x76ddb90 name=(null) suspended=YES requestCount=1 &gt; loadingCount=0/5&gt; 2012-10-31 15:28:26.851 ELOI[74400:c07] D &gt; restkit.network:RKRequest.m:437 Sending asynchronous POST request to &gt; URL `http://ServerX/cirrusdev/api/messages`. 2012-10-31 15:28:26.852 &gt; ELOI[74400:c07] D restkit.network:RKObjectLoader.m:374 POST or PUT &gt; request for source object &lt;NoddyModel: 0x7696ba0&gt;, serializing to MIME &gt; Type application/json for transport... 2012-10-31 15:28:26.853 &gt; ELOI[74400:c07] T restkit.network:RKRequest.m:399 Prepared POST &gt; URLRequest '&lt;NSMutableURLRequest &gt; http://ServerX/cirrusdev/api/messages&gt;'. HTTP Headers: { &gt; Accept = "application/json"; &gt; "Content-Length" = 47; &gt; "Content-Type" = "application/json"; }. HTTP Body: {"MessageId":"abc999","Message":"Hello Cirrus"}. 2012-10-31 &gt; 15:28:26.855 ELOI[74400:c07] D restkit.network:RKResponse.m:198 &gt; Proceeding with request to &lt;NSURLRequest &gt; http://ServerX/cirrusdev/api/messages&gt; 2012-10-31 15:28:31.224 &gt; ELOI[74400:c07] D restkit.network:RKResponse.m:219 NSHTTPURLResponse &gt; Status Code: 200 2012-10-31 15:28:31.224 ELOI[74400:c07] D &gt; restkit.network:RKResponse.m:220 Headers: { &gt; "Cache-Control" = "no-cache"; &gt; "Content-Length" = 74; &gt; "Content-Type" = "application/json; charset=utf-8"; &gt; Date = "Wed, 31 Oct 2012 15:28:30 GMT"; &gt; Expires = "-1"; &gt; Pragma = "no-cache"; &gt; Server = "Microsoft-IIS/7.5"; &gt; "X-AspNet-Version" = "4.0.30319"; &gt; "X-Powered-By" = "ASP.NET"; } 2012-10-31 15:28:31.225 ELOI[74400:c07] T restkit.network:RKResponse.m:231 Read response body: &gt; {"Successful":false,"Message":"We have received 0 &gt; message(s)","Data":null} </code></pre> <p>PS I manually edited the server name so if its different please ignore</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload