我正在使用AFNetworking
并且我想创建一个AFHTTPClient
. 此类初始化程序需要一个baseUrl
参数。如果我通过"www.mysite.com"
了,我以后如何将同一个客户端与子域一起使用?例如“ users.mysite.com
”
我不想为我使用的每个子域创建不同的客户端。另外,我无法更改它,baseUrl
因为它是只读的。关于如何做到这一点的任何想法?
我正在使用AFNetworking
并且我想创建一个AFHTTPClient
. 此类初始化程序需要一个baseUrl
参数。如果我通过"www.mysite.com"
了,我以后如何将同一个客户端与子域一起使用?例如“ users.mysite.com
”
我不想为我使用的每个子域创建不同的客户端。另外,我无法更改它,baseUrl
因为它是只读的。关于如何做到这一点的任何想法?
您不必指定相对路径 - 您可以指定绝对路径。
从文档:
两者
-requestWithMethod:path:parameters:
和-multipartFormRequestWithMethod:path:parameters:constructingBodyWithBlock:
从相对于 的路径构造 URL-baseURL
,使用NSURL +URLWithString:relativeToURL:
. 下面是一些关于baseURL
路径和相对路径如何交互的示例:
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"];
[NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo
[NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz
[NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo
[NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo
[NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/
[NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/
另外需要注意的是,尾部斜杠将被添加到任何
baseURL
没有斜杠的地方,否则在使用不带前导斜杠的路径构造 URL 时会导致意外行为。
所以你可以做类似的事情[[MyClient sharedClient] getPath:@"http://users.mysite.com/etc" ...]
,它会解析为完整的 URL。您也可以编写自己的getPath
方法,例如getUserPath
- 实现很简单。
我通过创建多个单例解决了类似的问题:
+ (id)sharedJSONClient
{
static dispatch_once_t pred = 0;
__strong static id __jsonClient = nil;
dispatch_once(&pred, ^{
__jsonClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[TSAPIURL stringByAppendingString:@"json/"]]];
[__jsonClient setParameterEncoding:AFFormURLParameterEncoding];
[__jsonClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
});
return __jsonClient;
}
+ (id)sharedXMLClient
{
static dispatch_once_t pred = 0;
__strong static id __xmlClient = nil;
dispatch_once(&pred, ^{
__xmlClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[TSAPIURL stringByAppendingString:@"xml/"]]];
[__xmlClient setParameterEncoding:AFFormURLParameterEncoding];
[__xmlClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
});
return __xmlClient;
}