0

iPhoneアプリから、ASP.NETWebサービスを呼び出しています。以下は私のコードです

NSString *urlString = @"http://tbtesting/teambinder5/KEY9XXXXXX-cXXe-49XX2-acca-2XXXXXXXa9/Dashboard/DashboardWidgets.asmx/GetAnnouncement";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"*/*" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"en-us" forHTTPHeaderField:@"Accept-Language"];
[request setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"];
[request setValue:@"20" forHTTPHeaderField:@"Content-Length"];
//[request setValue:@"3" forHTTPHeaderField:@"announceIntKey"];

NSError *error = nil;
NSURLResponse *response = [[NSURLResponse alloc] init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (error) {
    NSLog(@"Following error occured: %@", error.localizedDescription);
}
else {
    NSString *returnValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"message: %@", returnValue);
}

これがフィドラーから取ったヘッダーです。

POST http://tbtesting/teambinder5/KEY9XXXXXX-cXXe-49XX2-acca-2XXXXXXXa9/Dashboard/DashboardWidgets.asmx/GetAnnouncement HTTP/1.1
Accept: */*
Accept-Language: en-us
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
Content-Length: 20

{"announceIntKey":3}

次のエラーメッセージが表示されます。

"メッセージ": "無効なWebサービス呼び出し、パラメータの値がありません:\ u0027announceIntKey\u0027。"

ここでSOを少し検索した後、このエラーの原因を見つけました。announceIntKeyとその値を渡していないからです。

私はその理由を知っていますが、それを修正する方法についてはちょっと無知です。オブジェクトリテラルのように見えるため、他のヘッダー値のように渡すことはできません。SOでここで見つけたすべてのサンプルコードは、jQueryまたはその他の言語用です。

私の質問は、Objective Cでこの値を渡すにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

0

application/json の content-type を送信しているように見えるので、 bodyPOSTを含む の一部として値を渡す必要があるのは理にかなっています。JSON

それをリクエストの本文に追加する必要があります。NSMutableURLRequest がこれを管理するため、コンテンツの長さを設定する必要はありません。

NSString *body = "{\"announceIntKey\" : VALUE}";
[request setHTTPBody:[body dataUsingEncoding:NSASCIIStringEncoding]];

VALUEに実際に入るものに置き換える必要がありますannounceIntKey

于 2013-01-16T11:21:02.600 に答える