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

时间:2015-01-15 20:34:51

标签: ios objective-c afnetworking restkit

我正在尝试将RestKit的基本网址设置为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];

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

我可以简单地在我的所有API路径调用之前添加/api(例如/api/events/active而不是/events/active),但如果我最终使用它会更容易不同版本的API(例如/v1)。理想情况下,我只能更改基本URL而不是所有单个路径。我无法正确设置基本URL的任何想法?

非常感谢! -Ryan

解决:

基本网址以前存储为“http://example.com/api”,路径为“/ events”。

感谢Paul在下面的回答,正确的方法是将基本网址存储为“http://example.com/api/”,将路径存储为“事件”。

1 个答案:

答案 0 :(得分:7)

幕后AFHTTPClient使用-[NSURL URLWithString:relativeToURL:]构建您的网址。如果您查看此方法的docs,您会发现它需要一个尾部斜杠。你可以放弃这个,因为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

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