1

我正在objective-c 中构建一个JSON 帖子并将其发送到一个ASP.NET MVC 控制器。

我正在构建 NSMutableURLRequest 如下:

    request = [[NSMutableURLRequest alloc] initWithURL:url];

    NSString* jsonRequest = [NSString stringWithFormat: @"{\"collection\":\"images\",\"id\":\"%@\",\"objectjson\":%@}",response.id,response.json];

    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];

然后我发送请求如下:

        NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init];

        [NSURLConnection sendAsynchronousRequest:request queue:backgroundQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
        { ... completion code goes here

这在大多数情况下都很有效。但是,对于非常大的 JSON 字符串,我偶尔会收到一个 Web 服务错误,其中 Web 服务报告它在 JSON 中遇到文件结束标记。似乎 JSON 被截断了。

我将 JSON 发送到 ASP.NET MVC 控制器。

有没有人对可能发生的事情有任何智慧之言?是否有任何 ASP.NET Web 配置设置可能我需要调整以防止发生此问题。

我不明白的一件事是为什么它是一个间歇性的问题。

4

2 回答 2

2

这似乎是通过 3G 或 EDGE 连接丢失字节的结果。我能想出的最好办法是在服务器上检测内容长度标头大于请求 POST 正文,并返回一个状态代码,告诉客户端重试。客户端可以在 url 上传递一个重试计数,服务器可以读取它,如果它是某个值,服务器将返回一个错误代码,指示不应尝试重试。丑我知道,但我想不出更好的方法。这就是我要为我的照片上传应用程序做的事情。

祝你好运!

于 2013-05-17T15:48:26.297 回答
0

问题在于转换为 NSData

尝试这个

NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];
于 2013-09-17T19:44:48.617 回答