Restkit 无法 post 对象
Restkit failed to post object
我一直在成功地使用 Restkit 进行 GET,现在我尝试将它用于 POST 并出现错误。这是我认为非常标准的 RESTKit 代码:
RKObjectMapping *mappingTransaction = [RKObjectMapping mappingForClass:[Transaction class]];
NSDictionary *mappingTransactionDict = @{
@"final_price" : @"finalPrice",
@"discount" : @"discount",
@"customer_fk" : @"customerID",
@"typeofpayment_fk" : @"typeOfPaymentID",
@"shop_fk" : @"shopID",
@"systemuser_fk" : @"systemUserID",
@"company_fk" : @"companyID",
@"created_at" : @"creationDate",
@"updated_at" : @"updateDate"
};
[mappingTransaction addAttributeMappingsFromDictionary:mappingTransactionDict];
RKResponseDescriptor *transactionDescriptor =
[RKResponseDescriptor responseDescriptorWithMapping:mappingTransaction
method:RKRequestMethodPOST
pathPattern:@"/revenue/add/transaction"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager] addResponseDescriptor:transactionDescriptor];
[[RKObjectManager sharedManager] postObject:(Transaction *)transactionRecord
path:@"/revenue/add/transaction"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
//self.typeOfPaymentArray = mappingResult.array;
}
failure:^(RKObjectRequestOperation *operation, NSError *error){
NSLog(@"Transaction insert failed': %@", error);
}];
然后出现"TokenMismatchException"的错误:
我用谷歌搜索了它,但似乎所有线程都在谈论表单中的 CSRF 令牌,在我的例子中是第三方 IOS 应用程序。我的 RESTFul API 是 Laravel 5 的 运行。任何想法将不胜感激。感谢您的关注。
在你的例子中,你想在请求中(而不是在响应中)映射一个对象(事务),所以你应该使用这个方法而不是使用 responseDescriptorWithMapping
:
+ (instancetype)requestDescriptorWithMapping:(RKMapping *)mapping objectClass:(Class)objectClass rootKeyPath:(NSString *)rootKeyPath method:(RKRequestMethod)method
我一直在成功地使用 Restkit 进行 GET,现在我尝试将它用于 POST 并出现错误。这是我认为非常标准的 RESTKit 代码:
RKObjectMapping *mappingTransaction = [RKObjectMapping mappingForClass:[Transaction class]];
NSDictionary *mappingTransactionDict = @{
@"final_price" : @"finalPrice",
@"discount" : @"discount",
@"customer_fk" : @"customerID",
@"typeofpayment_fk" : @"typeOfPaymentID",
@"shop_fk" : @"shopID",
@"systemuser_fk" : @"systemUserID",
@"company_fk" : @"companyID",
@"created_at" : @"creationDate",
@"updated_at" : @"updateDate"
};
[mappingTransaction addAttributeMappingsFromDictionary:mappingTransactionDict];
RKResponseDescriptor *transactionDescriptor =
[RKResponseDescriptor responseDescriptorWithMapping:mappingTransaction
method:RKRequestMethodPOST
pathPattern:@"/revenue/add/transaction"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager] addResponseDescriptor:transactionDescriptor];
[[RKObjectManager sharedManager] postObject:(Transaction *)transactionRecord
path:@"/revenue/add/transaction"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
//self.typeOfPaymentArray = mappingResult.array;
}
failure:^(RKObjectRequestOperation *operation, NSError *error){
NSLog(@"Transaction insert failed': %@", error);
}];
然后出现"TokenMismatchException"的错误:
我用谷歌搜索了它,但似乎所有线程都在谈论表单中的 CSRF 令牌,在我的例子中是第三方 IOS 应用程序。我的 RESTFul API 是 Laravel 5 的 运行。任何想法将不胜感激。感谢您的关注。
在你的例子中,你想在请求中(而不是在响应中)映射一个对象(事务),所以你应该使用这个方法而不是使用 responseDescriptorWithMapping
:
+ (instancetype)requestDescriptorWithMapping:(RKMapping *)mapping objectClass:(Class)objectClass rootKeyPath:(NSString *)rootKeyPath method:(RKRequestMethod)method