2015-11-15 94 views
0

我很新的Xcode,我试图做一个POST请求。我在Google上搜索并找到了这个AFNetworking库。我读过一些文档,但他们都说不同的事情。所以,现在我用自己的例子在POST请求,我的代码如下所示:无法发送POST请求 - AFNetworking

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    NSDictionary *parameters = @{@"fName": @"firstname", @"lName": @"lastname"}; 
    [manager POST:@"http://00000.1111.ovh/api/Account/register" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"JSON: %@", responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 

然后我得到这个错误:

Error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo={com.alamofire.serialization.response.error.response= { URL: http://00000.1111.ovh/api/Account/register } { status code: 400, headers { "Content-Length" = 159; "Content-Type" = "application/json; charset=utf-8"; Date = "Sun, 15 Nov 2015 12:11:57 GMT"; Server = "Microsoft-IIS/8.5"; "X-Powered-By" = "ASP.NET"; } }, NSErrorFailingURLKey= http://00000.1111.ovh/api/Account/register , com.alamofire.serialization.response.error.data=<7b226d65 73736167 65223a22 54686520 72657175 65737420 69732069 6e76616c 69642e22 2c226d6f 64656c53 74617465 223a7b22 6c6f6769 6e2e7573 65726e61 6d65223a 5b225468 65205573 6572206e 616d6520 6669656c 64206973 20726571 75697265 642e225d 2c226c6f 67696e2e 70617373 776f7264 223a5b22 54686520 50617373 776f7264 20666965 6c642069 73207265 71756972 65642e22 5d7d7d>, NSLocalizedDescription=Request failed: bad request (400)}

希望有人能帮帮我!

+0

帮你一个忙,不要使用这个框架。改为使用NSURLSession。 –

+1

克劳斯,我会毫不犹豫地建议不要使用这个框架。对于新用户,正确编码请求非常复杂(例如,我在这里看到的99%的示例在线看不到百分比转义请求)。当然,如果你不喜欢'AFHTTPRequestOperationManager'基于'NSURLConnection'(现在已被弃用)的事实,那么使用非常相似的'AFHTTPSessionManager'(基于'NSURLSession')。 – Rob

+0

@克劳斯:虽然AFNetworking可能是一些(尤其是简单)案件中的矫枉过正,但您仍然在给出“我不明白你的问题,但我愿意回答它”的建议...... –

回答

2

如果你翻译服务器的响应到东西,你可以更好地诊断这些问题,你可以分析/检查:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
NSDictionary *parameters = @{@"fName": @"firstname", @"lName": @"lastname"}; 
[manager POST:@"http://00000.1111.ovh/api/Account/register" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON = %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error = %@", error); 
    if (operation.responseObject) { 
     NSLog(@"responseObject = %@", operation.responseObject); 
    } else { 
     NSLog(@"responseString = %@", operation.responseString); 
    } 
}]; 

如果你这样做,你会看到它与回应:

responseObject = { 
    message = "The request is invalid."; 
    modelState =  { 
     "login.password" =   (
      "The Password field is required." 
     ); 
     "login.username" =   (
      "The User name field is required." 
     ); 
    }; 
} 

显然,该请求缺少必要的身份验证详细信息。

+0

谢谢!这非常有用! –

1

您的请求被正确发送,但服务器以HTTP代码400响应。请检查服务器的API文档,了解请求的外观。