0

我正在尝试使用 RestKit 做一个相当基本的 HTTP PUT。我不想放置整个对象,因为 API 调用旨在接受单个查询参数并仅更新该字段。到目前为止,我尝试了两种方法,均不成功。

要发布到的 URL:https://myserver/api/users/{userId}

查询字符串参数:verificationCode=

示例用法:PUT https://myserver/api/users/101?verificationCode=646133

方法 #1:将查询参数放在 RKParams 对象中,并使用这些参数进行 PUT 调用。

    NSString *putUrl = [NSString stringWithFormat:@"/api/users/%i", [APIUserInfo sharedAPIUserInfo].apiUserIdx];
    NSLog(@"the PUT url is %@", putUrl);

    // Send a PUT to a remote resource. The dictionary will be transparently
    // converted into a URL encoded representation and sent along as the request body
    NSDictionary* paramsDict = [NSDictionary dictionaryWithObject:[_verificationCode text] forKey:@"verificationCode"];
    // Convert the NS Dictionary into Params
    RKParams *params = [RKParams paramsWithDictionary:paramsDict];

    [[RKClient sharedClient] put:putUrl params:params delegate:self];

方法 #2:构建整个 url 并尝试将参数设置为 nil 的 PUT。

    NSString *putUrl = [NSString stringWithFormat:@"/api/users/%i?verificationCode=%@", [APIUserInfo sharedAPIUserInfo].apiUserIdx, [_verificationCode text]];
    NSLog(@"the PUT url is %@", putUrl);

    [[RKClient sharedClient] put:putUrl params:nil delegate:self];

这两种方法都不适合我。第一个失败说“RestKit 被要求重新传输请求的新正文流。可能的连接错误或身份验证挑战?” 然后运行大约 10 秒并超时。第二种方法失败说 HTTP 状态 405 - 方法不允许。

谁能指出我哪里出错了,或者为我提供一个使用 RestKit 的简单 PUT 示例?我在那里找到的大多数示例都放置了我不想在这种情况下做的整个对象。


更新:

一旦我在服务器端整理了一些东西,方法 #2 就很有效。最终解决方案:

NSString *putUrl = [NSString stringWithFormat:@"/api/users/verify/%i?verificationCode=%@", [APIUserInfo sharedAPIUserInfo].apiUserIdx, [_verificationCode text]];
NSLog(@"the PUT url is %@", putUrl);

[[RKClient sharedClient] put:putUrl params:nil delegate:self];
4

1 回答 1

1

HTTP PUT 方法在您的网络服务器上被禁用。出于安全原因,默认情况下它在所有网络服务器上。

HTTP Status 405 - Method Not Allowed.
于 2012-08-09T01:30:15.147 回答