无效的Web服务调用,缺少参数Objective C的值

时间:2013-01-16 11:14:02

标签: ios objective-c web-services http-headers

在我的iPhone应用程序中,我正在调用ASP.NET Web服务。以下是我的代码

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);
}

以下是来自fiddler的标题。

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}

我收到以下错误消息。

"消息":"无效的网络服务电话,参数缺失值:\ u0027announceIntKey \ u0027。"

在这里搜索了一下之后我发现了这个错误的原因。这是因为我没有传递announceIntKey及其值。

虽然我知道原因,但我对如何纠正它有点无能为力。由于它看起来像是对象文字,因此您无法像其他任何标头值一样传递它。我在这里遇到的所有示例代码都是针对jQuery或其他语言的。

我的问题是如何在Objective C中传递这个值?

谢谢。

1 个答案:

答案 0 :(得分:0)

看起来您正在发送application / json的内容类型,因此您需要将该值作为包含POST正文的JSON的一部分传递。

您需要将其添加到请求正文中。您无需设置内容长度,因为NSMutableURLRequest将为您管理此内容。

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

您需要将VALUE替换为实际进入announceIntKey的内容。