【问题标题】:AFNetworking JSON RESTful Service parametersAFNetworking JSON RESTful 服务参数
【发布时间】:2015-06-13 11:18:21
【问题描述】:

我是使用 AFNetworking 的新手,调用 API 时缺少一些东西。

这是代码(大部分是 AF* 示例):

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy.allowInvalidCertificates = YES;
AFJSONRequestSerializer *reqSerializer = [AFJSONRequestSerializer serializer];
[reqSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[reqSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = reqSerializer;

AFJSONResponseSerializer *resSerializer = [AFJSONResponseSerializer serializer];
[resSerializer setReadingOptions:NSJSONReadingAllowFragments | NSJSONReadingMutableContainers];
resSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"application/json", nil];
manager.responseSerializer = resSerializer;

NSString *URLString =[NSString stringWithFormat:@"%@/users/userLogin", BaseURLString];
NSDictionary *params = @{
                         @"userName": self.txtUser.text,
                         @"passWord": self.txtPass.text
                         };

[manager POST:URLString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

按 URL 调用代码是: http://localhost:8000/users/userLogin

但具有正确参数的应该是: http://localhost:8000/users/userLogin/JOHN/MYPASS

最后我收到“请求失败:未找到 (404)”

测试 AFNetworking 的肮脏解决方法:

NSString *URLString = [NSString stringWithFormat:@"%@/users/userLogin/%@/%@", BaseURLString, self.txtUser.text, self.txtPass.text];

它奏效了:p

知道有什么问题吗?

感谢您的帮助!

【问题讨论】:

  • 参数未按照您在此处指定的方式传递,en.wikipedia.org/wiki/Query_string
  • 你的服务器代码是什么样的?
  • 例如,它是一个 JSON API: $app->post('/userLogin/:userName/:passWord', function($userName, $passWord) { userLogin($userName, $passWord) ; });
  • 如果是这种情况,那么 AFNetworking 正在做正确的事情。 localhost 不会在设备上存在,您使用的是模拟器,网站是否在您的 Mac 上运行?
  • 没错,我正在使用模拟器。问题是 url 格式,服务器正在获取没有参数的 baseurl

标签: ios json xcode afnetworking afnetworking-2


【解决方案1】:

确保您的资源路径正确。当 URL 路径无效或服务器找不到请求的资源时,将生成 404 错误。如果你传递的是 post 参数,那么服务器应该只处理 post 参数。 URL 应该是这样的 'http://localhost:8000/users/userLogin/'

【讨论】:

  • 谢谢,但这不是我想要达到的。让我们忽略http.....这是我的路由“users/userLogin/”,之后,我有类似于“users/userLogin/ME/MYPASS”的参数,服务器可以处理请求。在任何缺少参数的情况下,服务器都会回答 404。
  • 那么你不必在post请求中传递参数,你只需要创建这样的请求,即users/userLogin/ME/MYPASS
  • 像这样(正如我在帖子中提到的,肮脏的解决方法)? NSString *URLString = [NSString stringWithFormat:@"%@/users/userLogin/%@/%@", BaseURLString, self.txtUser.text, self.txtPass.text];
  • 呜呜……好的。感谢您的帮助,将尝试弄清楚如何调整服务器以“正常方式”使用
猜你喜欢
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2015-06-03
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
相关资源
最近更新 更多