我尝试使用方法发布一个对象 Foobar (该类有两个属性: string foo 和 string bar )类RKObjectManager的postObject 。
服务器端,我有一个接收POST方法的WCF服务
public void PostFoobar(Foobar foobar) { ... }
所有连接都有效。问题是收到的对象foobar总是NULL。似乎ResKit没有POST我的对象作为两个参数的封装,但是独立地发布两个字符串。
我的意思是,当我尝试实现以下方法(服务器端)时:
public void PostFoobar(string foo, string bar) { ... }
并且这两个参数不为空!它有效! 但我宁愿显然恢复序列化对象......
我怎么想配置我的POST请求来恢复服务器端的整个Foobar对象,而不是每个属性都独立?
这是我发送POST请求的代码
NSError *error = nil;
NSManagedObjectModel *managedObjectModel = @"myObjecModel";
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
[managedObjectStore createPersistentStoreCoordinator];
NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
NSAssert(persistentStore, @"Failed to add persistent store: %@", error);
[managedObjectStore createManagedObjectContexts];
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];
[RKManagedObjectStore setDefaultStore:managedObjectStore];
// Configure the object manager
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://192.168.1.10/rest"]];
objectManager.managedObjectStore = managedObjectStore;
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
[objectManager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[RKObjectManager setSharedManager:objectManager];
[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"text/plain"];
RKEntityMapping *postMapping = [RKEntityMapping mappingForEntityForName:@"Foobar" inManagedObjectStore:managedObjectStore];
[postMapping addAttributeMappingsFromDictionary:@{
@"foo" : @"strFoo", // server side:foo, iOS side: strFoo
@"bar" : @"strBar" // server side:bar, iOS side: strBar
}];
RKRequestDescriptor * requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[postMapping inverseMapping] objectClass:[Foobar class] rootKeyPath:nil method:RKRequestMethodPOST];
[objectManager addRequestDescriptor:requestDescriptor];
// POST to create
RKManagedObjectStore *objectStore = [[RKObjectManager sharedManager] managedObjectStore];
Foobar *foobar = [NSEntityDescription insertNewObjectForEntityForName:@"Foobar" inManagedObjectContext:objectStore.mainQueueManagedObjectContext];
foobar.strFoo = @"foo ipad";
foobar.strBar = @"bar ipad";
@try {
[[RKObjectManager sharedManager] postObject:foobar path:@"foobar" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failure: %@", error.localizedDescription);
}];
}
@catch (NSException *exception) {
NSLog(@"error - %@", exception);
}
还有一件事:
我使用Chrome客户端“ Simle REST客户端”测试了我的网络服务,它可以处理数据:
{ "foo": "foo from chrome", "bar" : "bar from chrome" }
这似乎很好......我不明白。
答案 0 :(得分:0)
您正在使用nil
:
[[RKObjectManager sharedManager] postObject:nil path:@"foobar" parameters:nil ...
所以RestKit没有任何序列化和参数。
如果这是一个拼写错误,请启用跟踪日志记录以进行映射并查看它正在执行的操作。此外,获取Charles或类似工具,并确切地检查通过网络发送的数据。