2012-04-18 6 views
1

私は302を返しているWebサービスを持っています。そして自動リダイレクトはRestKitによって行われます。私はリダイレクトの前に余分なロジックをしようとしています。私はRestKitがisRedirectisRedirectionを持っていることを知っています。だからrequest:didLoadResponse代理人で私はそれをチェックしようとしましたが、それらのどれにも当てはまらないようです。私は行方不明のものがありますか?RestKitのリダイレクトが動作していないことを検出しますか?

これを実装することによって、これを解決
- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response 
{ 
    if ([response isRedirection]) 
    { 
     NSLog(@"redirection"); 
    } 
    else if ([response isRedirect]) 
    { 
     NSLog(@"redirect"); 
    } 
    NSLog(@"response %@", [response bodyAsString]); 
} 
+0

私は同じ問題を抱えています。あなたはこれに対する解決策を見つけましたか? –

+0

私の答えを見てください。希望が役立ちます。 – kailoon

答えて

2

@implementation RKResponse (CustomRedirect) 

- (NSURLRequest *)connection:(NSURLConnection *)inConnection willSendRequest:(NSURLRequest *)inRequest redirectResponse:(NSURLResponse *)inRedirectResponse 
{ 
    NSLog(@"redirectResponse ***********************************************"); 

    NSURLRequest *newRequest = inRequest; 
    if (inRedirectResponse) { 
     newRequest = nil; 
    } 
    return newRequest; 
} 

@end 

これは基本的に、あなたがnilを返すされているので、自分自身をリダイレクト処理したいと言います。今度はisRedirectisRedirectionのチェックがヒットします。

+0

このコードをプロジェクトのどこに配置しましたか? –

+0

そして、どのように 'ld:warning:インスタンスメソッド '...'をカテゴリから...オーバーライドメソッドin class in ...'エラーを投げないようにしましたか? –

+0

それは私のために働いた!ありがとう!ちなみに、私はRKRequestを作成している同じクラス(私のプロジェクトクラスではなく、restkitクラスではない)にコードを配置しました。希望が役立ちます。 Ciao –

2

私は、その解決策に問題のある人にとっては、「侵略的」ではないことが判明しました。 使用

[request setFollowRedirect:NO] 

、あなたはrequestDidReceiveResponseコールバックでトラップ302にできるはずです。 それは私のために働いた。

+0

私はそれをテストして動作するので、私はこの新しいメソッドを支持しています。これは、私がRestkitを更新したときに、既にrestkitによって実装されているリダイレクトカテゴリについての警告を得るようになったので、最近追加されたはずです。 – kailoon

0

古いスレッド、私は知っていますが、誰かが見に来る場合に備えて。あなたがRKObjectManagerを使用している場合は、リダイレクトを変更/無視するためにsetRedirectResponseBlockを実装できます。

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:url]; 
RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request ...etc...]; 
[operation.HTTPRequestOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { 
     return redirectResponse ? nil : request; 
    }]; 
[objectManager enqueueObjectRequestOperation:operation]; 

は、トリックを行うようです。

関連する問題