1

我目前正在使用异步 NSURLConnection 将 json 数据发布到 ASP.Net WebAPI 资源。正在调用 connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:,并且正在写入正确数量的数据。但是 connection:didReceiveResponse:, connection:didReceiveData: 或 connectionDidFinishLoading: 没有被调用,但最终它放弃了,连接丢失了。

我正在按如下方式设置连接:

NSURL *url = [[NSURL URLWithString:[Common baseUrl]] URLByAppendingPathComponent:@"api/iCat/wishlists/upload"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.f];
NSString *jsonString = [self generateStrippedJsonForWishlist:wishlist];
NSData *requestData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:requestData];

并启动连接:

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

最终,请求将超时并显示“网络连接丢失”错误消息。在我看来,该应用程序似乎从未完全完成编写消息正文。

从 api 方面来看,该方法实际上从未被调用(没有命中断点)。但是,如果我发送没有正文的请求,那么它会发送。

我已经使用 curl 测试了相同的调用,它按预期工作:

curl -v -i -X POST -H "Content-Type: application/json" -d '{"CreatedBy":"iPad Simulator","ContactName":"Ddd","ContactEmail":"ddd","Products":[{"ProductId":117,"ProductName":"Internal doors - deco","Specification":""}]}' http://SCMOBILE02:1861/api/iCat/wishlists/upload
4

2 回答 2

0

在发布 json 数据时尝试库https://github.com/AFNetworking/AFNetworking 。

于 2013-04-04T15:01:24.587 回答
0

你可以试试下面的代码吗?

-(void) post
{
    NSString * a = @"{company_name : \"com\"}";
    NSString * URL = @"yourUrl";

    NSString *post = [NSString stringWithFormat: @"%@",a];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

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

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
    [request setURL:[NSURL URLWithString:URL]];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setTimeoutInterval:20.0];
    [request setHTTPBody:postData];


    [NSURLConnection connectionWithRequest:request delegate:self];

}

在您的 web api 中,您应该具有以下类和 post 方法,如下所示

        public class company 
        {
            public string company_name { get; set; }


        }


       // POST api/values
        public void Post([FromBody]company value)
        {
            var t = value;
        }
于 2014-08-15T18:52:20.630 回答