0

我需要将 RestKit 配置为与期望以下内容的服务器 API 交互:

  • 所有请求都在 multipart/form-data 中
  • 有一个 JSON 有效负载。但是,客户端必须将有效负载折叠成表单数据字符串并在其前面加上“json=”
  • 身份验证是通过使用包含任何 GET 参数的 URL 对 JSON 有效负载的内容进行哈希处理来完成的。并将此哈希附加到 URL(是的,我知道这很糟糕。但我无法控制 API)

我试图让 RestKit 将其序列化输出附加到 json=,然后将 RKObjectLoader 修改为计算机并附加正确的签名哈希。

我已经尝试继承 RKObjectManager 并覆盖 sendObject:toResourcePath:usingBlock: 来覆盖 HTTPBody; 但不能让它工作。我也尝试过继承 RKClient 和 configureRequest: 但似乎这个方法在对象序列化之前被调用。

这是我使用 RestKit 的第一天。帮助将不胜感激!谢谢!

4

1 回答 1

0

更新:我制定了一个与我原来描述的底部不同的解决方案。我创建了 RKObjectLoader 和 RKObjectManager 的子类。自定义对象管理器只需进行一项更改即可返回自定义对象加载器。对象加载器的发送消息被覆盖以执行自定义构造。

这是我制定的解决方案。

我使用 RKClient 的一个子类,我在其中覆盖

- (void)configureRequest:(RKRequest *)request {
  [super configureRequest:request];
  request.delegate = self;
}

并在委托中完成我所有的编码/签名。

- (void)requestWillPrepareForSend:(RKRequest *)request {
  [self encodeJSONPayloadForRequest:request];
  [self signRequest:request];
}

- (void)encodeJSONPayloadForRequest:(RKRequest*)request {
  NSDictionary * bodyDict = (NSDictionary*)request.params;
  NSError * error = nil;
  NSString * jsonString = [bodyDict JSONStringWithOptions:JKSerializeOptionNone error:&error];
  if (error) NSAssert(false, @"error serializing into JSON");
  NSDictionary * dictionary = [NSDictionary dictionaryWithObject:jsonString forKey:@"json"];
  request.params = dictionary;
}

我需要实现一种机制来传递给任何预先存在的委托。但是,这种方法似乎可以解决问题。

于 2012-10-04T22:29:51.430 回答