【问题标题】:AFNetworking 2 custom session managerAFNetworking 2 自定义会话管理器
【发布时间】:2014-09-11 18:05:15
【问题描述】:

我想拥有带有基本 url 的会话管理器,而不是使用标准:

[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];
}

所以事实上我自己的子类应该以同样的方式工作..但它没有!

我得到状态码200Request 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 时完全没有问题 - 我处于成功块并且可以解析响应。

【问题讨论】:

    标签: ios json serialization afnetworking-2


    【解决方案1】:

    嗯,整个问题是 kMyBaseURL 是:

    #define kMGBaseURL @"http://example.com/api"
    

    而不是

    #define kMGBaseURL @"http://example.com/api/"
    

    后来我使用链接作为@"/something" 而不是@"something"

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2011-06-17
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2015-05-17
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多