Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何看待AFNetworking中json帖子的错误?_Json_Ios7_Django Rest Framework_Afnetworking 2 - Fatal编程技术网

如何看待AFNetworking中json帖子的错误?

如何看待AFNetworking中json帖子的错误?,json,ios7,django-rest-framework,afnetworking-2,Json,Ios7,Django Rest Framework,Afnetworking 2,在查看之后,我看不到在哪里可以找到错误消息 这是我的设置: -(id)init { if ((self = [super init])) { NSURL *url = [NSURL URLWithString:DebugURLString]; self.session = [[AFHTTPSessionManager alloc] initWithBaseURL:url]; self.session.requestSerializer

在查看之后,我看不到在哪里可以找到错误消息

这是我的设置:

-(id)init
{
    if ((self = [super init])) {
        NSURL *url = [NSURL URLWithString:DebugURLString];

        self.session = [[AFHTTPSessionManager alloc] initWithBaseURL:url];

        self.session.requestSerializer = [AFJSONRequestSerializer serializer];
        self.session.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
    }

    return self;
}

-(void) login:(NSString *)email pwd:(NSString *)pwd result:(void(^)(NSError* result))handler
{
    NSDictionary *params = @{@"username": email, @"password":pwd};

    [self.session POST:@"auth/api-token/" parameters:params
               success:^(NSURLSessionDataTask *task, id responseObject) {
                   NSLog(@"%@", responseObject);
                   handler(nil);
               }
               failure:^(NSURLSessionDataTask *task, NSError *error) {
                   NSLog(@"%@", task);
                   NSLog(@"%@", error.userInfo);
                   handler(error);
               }];
}
我直接调用rest\u framework.authtoken.views.get\u auth\u令牌,请求用户名和密码并返回令牌

如果用户/通行证正确,则此工作正常。但如果不是,我会得到:

error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]
<NSHTTPURLResponse: 0xb388f20> { URL: http://localhost:8000/auth/api-token/ } { status code: 400, headers {
    Allow = "POST, OPTIONS";
    "Content-Type" = "application/json";
    Date = "Sat, 11 Jan 2014 02:14:13 GMT";
    Server = "WSGIServer/0.1 Python/2.7.5";
    Vary = "Accept, Cookie";
} }
但我在错误中找不到它

此外,尽管我设置了responseSerializer,但它在任务中报告:

(lldb) po task.response
<NSHTTPURLResponse: 0xb388f20> { URL: http://localhost:8000/auth/api-token/ } { status code: 400, headers {
    Allow = "POST, OPTIONS";
    "Content-Type" = "application/json";
    Date = "Sat, 11 Jan 2014 02:14:13 GMT";
    Server = "WSGIServer/0.1 Python/2.7.5";
    Vary = "Accept, Cookie";
而不是JSon。我需要修复什么?

您遇到了AFNetworking v2的一个怪癖-默认情况下,响应主体不会传递到故障块中

底线是您需要将AFJSONResponseSerializer子类化,以便在responseObjectForResponse:data:error:期间将所需的响应数据添加到NSError的userInfo字典中。然后您就可以访问它了

你的问题促使我重新审视这个问题。现在有了,而且还可以用

我希望这一切都有帮助


AFV2很棒;这种行为在采用它时是一种奇怪的行为。我最初的想法是,这不可能是正确的,但我认为基本的理由是,鼓励您创建自己的响应序列化程序。附带的示例相当轻。您可以轻松创建自己的响应序列化器,响应序列化器是封装网络相关逻辑的好地方,否则这些逻辑将返回到您的应用程序中。

这确实起到了作用,但是正文返回的是NSString而不是JSON/字典…您将获得NSData。如果你有一个字符串,你可以自己在某处转换它。如果您想要一个NSJ字典,您可以在那里使用NSJSONSerialization。
(lldb) po task.response
<NSHTTPURLResponse: 0xb388f20> { URL: http://localhost:8000/auth/api-token/ } { status code: 400, headers {
    Allow = "POST, OPTIONS";
    "Content-Type" = "application/json";
    Date = "Sat, 11 Jan 2014 02:14:13 GMT";
    Server = "WSGIServer/0.1 Python/2.7.5";
    Vary = "Accept, Cookie";