【问题标题】:JSON truncated when sent via NSMutableURLRequest to APS.NET MVC controllerJSON 通过 NSMutableURLRequest 发送到 APS.NET MVC 控制器时被截断
【发布时间】:2013-04-16 10:07:45
【问题描述】:

我正在 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 配置设置可能我需要调整以防止出现此问题。

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

【问题讨论】:

  • 有同样的问题。网上什么都没查到。不确定是 iOS 还是 IIS……我个人倾向于责怪 IIS,但谁知道呢……
  • 也许这个链接有帮助:stackoverflow.com/questions/12662282/…
  • 在我的服务器上进行了一些登录,发现内容长度标头确实是我的 iOS 应用程序设置的正确值,但实际流包含的字节数少于内容长度。有些字节在传输过程中一定会丢失,我猜可能是因为 3G 连接。除了告诉客户再试一次之外,不确定其他解决方法。

标签: objective-c asp.net-mvc json nsurlconnection nsurlrequest


【解决方案1】:

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

祝你好运!

【讨论】:

    【解决方案2】:

    问题在于转换为 NSData

    试试这个

    NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];
    

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2016-09-07
      相关资源
      最近更新 更多