AFNetworking GET 参数与包含在 URL 键参数中的 JSON (NSDictionary) 字符串

Posted

技术标签:

【中文标题】AFNetworking GET 参数与包含在 URL 键参数中的 JSON (NSDictionary) 字符串【英文标题】:AFNetworking GET parameters with JSON (NSDictionary) string contained in URL key parameter 【发布时间】:2015-07-02 06:32:24 【问题描述】:

这个 JSON 字符串必须被发送:


"dashboard": "compact",
"theme": "dark",
"show_side_bar": "yes"

使用 GET 方法以这种格式(因为服务器使用此 php 代码 $_GET["setting"] 检索数据)和 AFHTTPRequestOperationManager 到 REST API,这样等效的 URL 变为:

http://www.examplesite.com/api/change_setting?setting= "dashboard" : "compact", "theme" : "dark", "show_side_bar" : "yes"

当我在AFHTTPRequestOperationManagerGET:parameters:success:failure: 中创建参数NSDictionary 时,它会将 url 键参数 添加到参数字典本身,如下所示:


  "setting": 
    "dashboard": "compact",
    "theme": "dark",
    "show_side_bar": "yes"
  

简而言之only JSON 字符串必须封装在 setting 参数 NOT 中作为 setting 的对象JSON 字符串。

编辑: 代码如下:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @
                             kSettingDashboard: @"compact",
                             kSettingTheme: @"dark",
                             kSettingShowSideBar: @"yes"
                             ;

[manager GET:kURLChangeSetting
  parameters:[NSDictionary dictionaryWithObject:parameters forKey:@"setting"]
     success:^(AFHTTPRequestOperation *operation, id responseObject) 
         // code
      failure:^(AFHTTPRequestOperation *operation, NSError *error) 
         /// code
     ];

【问题讨论】:

为什么这不是 POST 或 PUT?显示您在其中创建和设置字典和 JSON 的代码 @Wain 因为 API 使用 GET 方法。添加了代码。我不知道如何实现这一点。这方面的一些建议会很有帮助。 【参考方案1】:

试试这个:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];
NSString *parametersString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

[manager GET:kURLChangeSetting
  parameters:@@"setting" : parametersString
     success:^(AFHTTPRequestOperation *operation, id responseObject) 
         // code
      failure:^(AFHTTPRequestOperation *operation, NSError *error) 
         /// code
     ];

【讨论】:

如果你知道,请你解释一下为什么会这样?【参考方案2】:

你可以要求php开发者把GET改成request,这样你就可以在POST发送数据,这样你的数据就可以大量安全地发送了

【讨论】:

以上是关于AFNetworking GET 参数与包含在 URL 键参数中的 JSON (NSDictionary) 字符串的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 参数字典不适用于 GET 请求

使用 afnetworking 在 GET 方法的 url 中传递参数

AFNetworking GET 正文中的参数

使用 AFNetworking 的 API 请求出错

在 AFNetworking 3 GET 请求中删除查询末尾的问号

如何从 AFNETWORKING POST 获取参数