【问题标题】:AFHTTPSessionManager Subclass: Post API with body.AFHTTPSessionManager 子类:带有正文的发布 API。
【发布时间】:2014-04-17 19:00:11
【问题描述】:

我想出了如何使用 AFnetworking 传递参数,但我很难弄清楚如何将正文作为我的 API 调用的一部分传递。目前这就是我所做的:

    - (void)authenticateUser:(NSString *)username
                password:(NSString *)password
                success:(void (^) (NSString *accessToken))success
                failure:(RequestFailureBlock)failure
{
    NSString *authURL = @"http://someurlforauthentication";
    NSDictionary *parameters = @{@"username" : username,
                                 @"password" : password };

    [self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];




    [self POST:authURL parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject){

        NSString *accessToken = responseObject[@"access_token"];

        // Store Access Token
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:accessToken forKey:APIAuthorizationToken];
        [defaults synchronize];

        NSLog(@"Hello %@", accessToken);

        success(accessToken);

    } failure:failure];
}

我需要做的不是传递任何参数,而是传递一个带有包含登录凭据的 json 字符串的正文。像这样的

 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

// Body

const char bytes[43] = "{\n \"username\": \"max\",\n \"password\": \"pass\"\n}";
request.HTTPBody = [NSData dataWithBytes:bytes length:43];

提前致谢。

【问题讨论】:

    标签: ios objective-c afnetworking afnetworking-2


    【解决方案1】:

    使用 AFJSONRequestSerializer 和 AFJSONResponseSerializer 你可以做你想做的事。然后只需使用您用于发布的代码即可。整个过程应该如下所示:

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
        [manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
        [manager setResponseSerializer:[AFJSONResponseSerializer serializer]];
    
        NSDictionary *parameters = @{@"test": @"this is a test"};
    
        [manager POST:@"http://localhost:8080/TestRequest/test" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
    
            NSLog(@"%@",[responseObject description]);
    
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
    
            NSLog(@"%@",[error localizedDescription]);
        }];
    

    【讨论】:

    • 问题是我上面的代码中没有请求。我正在继承 AFHTTPSessionManager。您能否说明如何将其添加到我在帖子中的代码中?
    • 我已经更新了我的答案。希望能帮助到你。上面的代码接受一个 json 输入并返回一个 json 输出。
    • 我认为这个答案没有完全回答这个问题。除非在这篇文章之后标题改变了,否则你有参数,但没有正文。没有 HTTPBody(例如 Swift 2.3 - let request = NSMutableURLRequest(URL: url); ... request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(someDict as AnyObject, options: .PrettyPrinted);)。我看到 URL 端点上正在加载参数,但没有 HTTPBody。我错了,没有看到尸体?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2018-12-11
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多