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

通过实施这个解决了这个问题:

@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将被击中。

于 2012-04-25T18:58:21.933 回答
2

我已经找到了一种替代 kailon 方式的方法,对于每个对该解决方案有问题的人来说,它的“代码侵入性”应该少一些。采用

[request setFollowRedirect:NO]

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

于 2012-10-18T09:35:32.740 回答
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 回答