在 IOS 上使用 URL 将 JSON 发布到 API

Posted

技术标签:

【中文标题】在 IOS 上使用 URL 将 JSON 发布到 API【英文标题】:Posting JSON to API with URL on IOS 【发布时间】:2015-06-30 18:15:46 【问题描述】:

我已经设计了一个闹钟,根据这个闹钟我需要在api上发布用户设置的闹钟,稍后api会处理这个过程并在闹钟时间到时通知我。所以基本上,我整天搜索并带着这些:

到目前为止,我付出了很多努力!请帮助我进一步..

 NSMutableDictionary *alarmDic = [[NSMutableDictionary alloc] initWithCapacity:4];
    NSLog(@"token: %@", self.token);
    [alarmDic setObject:[NSNumber numberWithInteger:42] forKey:@"Token"];
    NSLog(@"kur id: %lu", alarm.kurID);
    [alarmDic setObject:[NSNumber numberWithInteger:alarm.kurID] forKey:@"CurrencyId"];
    NSLog(@"not val: %f", alarm.kurAlis);
    [alarmDic setObject:[NSNumber numberWithFloat:alarm.kurAlis] forKey:@"NotificationValue"];
    NSLog(@"%ld", (long)alarm.kurTur);
    [alarmDic setObject:[NSNumber numberWithInteger:alarm.kurTur] forKey:@"Type"];

    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:alarmDic
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:nil];
    NSLog(@"%@", [[NSString alloc] initWithData:jsonData
                                       encoding:NSUTF8StringEncoding]);

    NSString *dataLength = [NSString stringWithFormat:@"%lu", (unsigned long)[jsonData length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://api-dvzalt.azurewebsites.net/api/Notification/PostNotification"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:dataLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:jsonData];

    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if(conn) 
        NSLog(@"Connection Successful");
     else 
        NSLog(@"Connection could not be made");
    

在日志窗口中,

requestReply: Connection Successful

但是,api 上没有发生任何事情,一如既往地说明这一点。

The requested resource does not support http method 'GET'.

这是我的困惑。它说连接成功,但在 API 上,还是一样。在这种情况下我该怎么办?我可能会跳过一些东西,但我不知道我跳过了什么。我已经完成了我想的所有步骤。

注意:API 运行良好,很可能与我的代码有关。

谢谢!

【问题讨论】:

【参考方案1】:

所以我很好奇您的 Web 处理程序中是否没有 JSON 数据的字段名称?像“jsonData”这样的东西?现在您正在将 JSON 数据填充到您的正文中,但没有识别字段名称供处理程序将其拉出。

我在想这样的事情:

NSString jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSString requestString = [NSString stringWithFormat:@"jsonData=%@", jsonString];

然后对 requestString 进行编码并在你的 body 中使用它。

【讨论】:

所以我坚持了一件事。我应该把那个 requestString 放在哪里? HTTPBody,你的意思是 body 吗?它需要一个数据..

以上是关于在 IOS 上使用 URL 将 JSON 发布到 API的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON url 图片解析到 iOS 不起作用

iOS - 托管 JSON 文件以使用 URL 解析它 [关闭]

如何从从json获得的url加载图像到collectionview

找不到适用于 iOS 的 stig -JSON dmg 文件

在 PhoneGap IOS 上缓存图像的最佳方法

将 Hadoop Pig 输出作为 JSON 数据发布到 URL?