0

RestKit を使用してかなり基本的な HTTP PUT を実行しようとしています。API 呼び出しは単一のクエリ パラメータを受け入れ、そのフィールドを更新するだけで設計されているため、オブジェクト全体を配置する必要はありません。これまでに2つのアプローチを試みましたが、どちらも失敗しました。

投稿先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 全体を作成し、params を 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 秒間実行されてタイムアウトになります。2 番目のアプローチは、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