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

以下のコードを試していただけますか?

-(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];

}

あなたのウェブAPIには、以下のようなクラスとポストメソッドが必要です

        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 に答える
0

json データを投稿しながら、ライブラリhttps://github.com/AFNetworking/AFNetworkingを試してください。

于 2013-04-04T15:01:24.587 に答える