1

302 を返す Web サービスがあり、自動リダイレクトは RestKit によって行われます。リダイレクトの前に追加のロジックを実行しようとしています。RestKit にはisRedirectisRedirection. そのため、request:didLoadResponseデリゲートでチェックしようとしましたが、それらのいずれにもヒットしていないようです。足りないものはありますか?

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response 
{
    if ([response isRedirection]) 
    {
        NSLog(@"redirection");
    } 
    else if ([response isRedirect])
    {
        NSLog(@"redirect");
    }
    NSLog(@"response %@", [response bodyAsString]);
}
4

3 に答える 3

2

そのソリューションで問題を抱えているすべての人にとって、「コードの侵襲性」が少し少なくなるように、kailoon の方法に代わる方法を見つけました。使用する

[request setFollowRedirect:NO]

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

于 2012-10-18T09:35:32.740 に答える
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 を返すため、リダイレクトを自分で処理する必要があることを示しています。これでisRedirectandisRedirectionがヒットします。

于 2012-04-25T18:58:21.933 に答える
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];

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

于 2016-07-07T16:11:49.763 に答える