使用两个不同的baseUrl - AFHTTPSessionManager

时间:2014-07-15 05:44:47

标签: objective-c afnetworking-2

我正在使用AFHTTPSessionManager在网络上进行api调用。我有会话管理器的signleton对象,它启动一次基本URL。偶尔,我需要用不同的baseurl进行api调用。它只读取AFNetworking.h文件。

在这里处理不同基础的正确方法是什么?请帮助。

+ (ApiClient *)sharedClient {

    static ApiClient *_sharedClient = nil;

    static dispatch_once_t oncePredicate;

    dispatch_once(&oncePredicate, ^{
        _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kTraktBaseURLString]];
    });
    return _sharedClient;
}

1 个答案:

答案 0 :(得分:7)

您可以使用+URLWithString:relativeToURL:方法的行为来覆盖baseURL。

马特mentioned it in Docs

  

对于HTTP便捷方法,请求序列化程序使用NSURL + URLWithString:relativeToURL:,在提供时,从相对于baseURL的路径构造URL。如果baseURL为nil,则需要使用NSURL + URLWithString将路径解析为有效的NSURL对象:。

     

以下是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作为URLString参数传递给GET:parameters:success:failure:而不是URL路径。

[manager GET:@"http://otherBaseURL.com/url/path" parameters:nil success:... failure:...]