RestKit基本URL - 域名后面的目录

rym*_*gno 3 objective-c ios restkit afnetworking

我正在尝试为RestKit设置我的基本URL,如下http://example.com/api所示:

// initialize AFNetworking HTTPClient
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/api"];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

// initialize RestKit
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
[RKObjectManager setSharedManager:objectManager];
Run Code Online (Sandbox Code Playgroud)

但是由于某种原因,它只将域保存http://example.com为基本URL,后面没有后续目录.

我可以简单地/api在我的所有API路径调用前面(例如/api/events/active代替/events/active),但如果我最终使用不同版本的API(例如/v1),那将会容易得多.理想情况下,我只能更改基本URL而不是所有单个路径.为什么我无法正确设置基本URL的任何想法?

非常感谢!-Ryan

解决了:

基本URL以前存储为" http://example.com/api ",路径为"/ events".

感谢Paul在下面的回答,正确的方法是将基本URL存储为" http://example.com/api/ ",将路径存储为"events".

Pau*_*l.s 7

引擎盖AFHTTPClient用于-[NSURL URLWithString:relativeToURL:]构建您的URL.如果你查看这个方法的文档,你会发现它需要一个尾部斜杠.你可以逃脱这个,因为AFHTTPClient似乎为你追加了这个.

这让我们留下了这个潜在的问题

NSURL *baseURL = [NSURL URLWithString:@"https://example.com/api/"];
NSLog(@"%@", [[NSURL URLWithString:@"/events" relativeToURL:baseURL] absoluteURL]);
//=> https://example.com/events
NSLog(@"%@", [[NSURL URLWithString:@"events"  relativeToURL:baseURL] absoluteURL]);
//=> https://example.com/api/events
Run Code Online (Sandbox Code Playgroud)

如果你预加一个正斜杠,它会敲掉任何路径组件,只使用url的主机部分.因此,请确保不要在路径中添加斜杠

  • 这解决了我的问题,感谢一堆:) (2认同)