我希望会话管理器使用基本网址,而不是使用标准:
[AFHTTPSessionManager manager];
这是100%正常工作,我已经测试过了,我正在尝试使用自己的子类。
所以我已经将AFHTTPSessionManager
子类化并创建了共享实例:
+ (MySessionManager *)sharedModel {
static MySessionManager *sharedInstance = nil;
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [[self alloc] initWithBaseURL:[NSURL URLWithString:kMyBaseURL]];
}
}
return sharedInstance;
}
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (self) {
// see description below
}
return self;
}
我已经检查了AFHTTPSessionManager manager
的实现,它看起来像这样:
+ (instancetype)manager {
return [[[self class] alloc] initWithBaseURL:nil];
}
所以实际上我自己的子类应该以相同的方式工作..但它没有!
我使用200
获取状态代码Request failed: unacceptable content-type: text/html
。但是我确定它是json,因为使用AFHTTPSessionManager manager
一切正常并显示为text / json。怎么了,我做错了什么?
---编辑---
此外,我已尝试在initWithBaseURL
中设置响应/请求序列化程序,但它没有帮助。
self.requestSerializer = [AFHTTPRequestSerializer serializer];
self.responseSerializer = [AFJSONResponseSerializer serializer];
---编辑---
我也尝试过使用这些配置,但一切都失败了(400,401)。
[self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[self.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", nil]];
再次:当使用manager sharedInstance时,根本没有问题 - 我成功阻止并且可以解析响应。
答案 0 :(得分:0)
嗯,整个问题是kMyBaseURL是:
#define kMGBaseURL @"http://example.com/api"
而不是
#define kMGBaseURL @"http://example.com/api/"
之后我将链接用作@"/something"
而不是@"something"
。