AFNetworking2在POST请求中发送参数作为查询string?

我需要在URL中发送查询string以及在正文中的JSON在发送POST请求。要发送URL中的查询string我重写HTTPMethodsEncodingParametersInURI属性如在这个线程上SO

 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:fullUrl]]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithArray:@[@"POST", @"GET", @"HEAD", @"PUT", @"DELETE"]]; [manager POST:fullUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }]; 

但似乎这样做也将我的JSON数据添加到URL,因此我的请求不在服务器上执行。但我只需要发送'命令'参数到url和一些JSON数据到请求体。 我的fullUrlstring看起来像http:// some_ip_address / config?command = some_command ,param是NSDictionary对象。 请注意,在fullUrl ie 命令中有一个参数,我也发送一个NSDictionary对象作为参数

 [manager POST:fullUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }]; 

Edit2:我也试过用NSURLSession

 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://my_server_ip/config?command=plugs"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; NSError *error; NSData *postData = [NSJSONSerialization dataWithJSONObject:param options:0 error:&error]; [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:postData]; NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; }]; [postDataTask resume]; 

在NSURLResponse中获得状态码:400。

编辑3:有人build议在这个SO线程子类AFHTTPRequestSerializer类,所以我试过

 @implementation CustomAFHTTPRequestSerializer -(id)init { self = [super init]; return self; } - (NSMutableURLRequest *)requestWithMethod:(NSString *)method URLString:(NSString *)URLString parameters:(NSDictionary *)parameters error:(NSError *__autoreleasing *)error { NSString* encodedUrl = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:encodedUrl] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; NSError *error1; NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error1]; [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:postData]; return request; } @end 

并将其分配为operationManager的requestSerializer

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [[CustomAFHTTPRequestSerializer alloc] init]; 

但仍然得到Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)

请帮助我们,任何帮助将不胜感激。