【问题标题】:Invalid web service call, missing value for parameter Objective C无效的 Web 服务调用,参数 Objective C 的缺失值
【发布时间】:2013-01-16 11:14:02
【问题描述】:

从我的 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。”

在 SO 上进行了一些搜索后,我找到了导致此错误的原因。这是因为我没有传递announceIntKey 及其值。

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 现在它抛出了这个错误。 {"Message":"抛出了 \u0027System.ApplicationException\u0027 类型的异常。"。我设置了这样的值NSString *body = @"{\"announceIntKey\" : \"3\"}"; 和这样的NSString *body = @"{\"announceIntKey\" : 3}";。两次都返回与上述相同的错误。
    • 你想调用什么WebService?你有规格吗?
    • 它实际上与我办公室中运行的这个 Web 应用程序集成在一起。我目前没有规格。
    • 我刚刚在 URL 上发现了 ASMX 扩展。 ASP.Net 领域的 Web 服务通常使用 SOAP,它要复杂得多,但并非不可能使用。
    • 其实这些网络服务早就实现了。由一个单独的开发团队。我无法对它们进行任何更改。只是现在我们正在使用它已经实现的 Web 服务为该应用程序开发一个 iPhone 客户端。所以我有点坚持使用http。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多