Ios web服务调用无效,缺少参数目标C的值

Ios web服务调用无效,缺少参数目标C的值,ios,objective-c,web-services,http-headers,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

在我的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}
我收到以下错误消息

“消息”:“无效的web服务调用,缺少参数值:\u0027announceIntKey\u0027。”

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

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

我的问题是如何在目标C中传递该值


谢谢。

看起来您正在发送应用程序/json的内容类型,因此您需要将该值作为包含
json
正文的
POST
的一部分进行传递

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

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

您需要将
替换为
announceIntKey
中实际包含的值,现在它会抛出此错误。{“Message”:“抛出了类型为\u0027System.ApplicationException\u0027的异常。”。我设置了如下值:
NSString*body=@“{\”announceIntKey\\:\“3\””;
以及类似的值:
NSString*body=@“{\”announceIntKey\\:3}”;
。两次它都返回了与上面相同的错误。您想调用什么web服务?您有规范吗?它实际上与我办公室中运行的web应用程序集成。我目前没有规范。我刚刚在URL上发现了ASMX扩展。ASP.Net中的web服务通常使用SOAP,这比icated,但并非不可能使用。事实上,这些web服务是很久以前实现的。由一个独立的开发团队实施。我无法对它们进行任何更改。只是现在我们正在使用已经实现的web服务为该应用程序开发iPhone客户端。所以我有点坚持使用http:)