检测RestKit中的重定向不起作用?

时间:2012-04-18 17:19:51

标签: iphone objective-c redirect restkit

我有一个返回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]);
}

3 个答案:

答案 0 :(得分: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的支票将被点击。

答案 1 :(得分:2)

我已经找到了一种替代kailoon方式的方法,它可能会少一些“代码侵入式”#34;对于每个人都有解决方案的问题。 使用

[request setFollowRedirect:NO]

并且您应该能够在requestDidReceiveResponse回调中捕获302。 它对我有用。

答案 2 :(得分: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];

似乎可以做到这一点。