我有一个返回302的Web服务,自动重定向由RestKit完成。我想在重定向之前做额外的逻辑。我知道RestKit有isRedirect
和isRedirection
。所以在request:didLoadResponse
委托中,我试图检查它,但它似乎没有击中任何一个。有什么我想念的吗?
- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response
{
if ([response isRedirection])
{
NSLog(@"redirection");
}
else if ([response isRedirect])
{
NSLog(@"redirect");
}
NSLog(@"response %@", [response bodyAsString]);
}
答案 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。现在,isRedirect
和isRedirection
的支票将被点击。
答案 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];
似乎可以做到这一点。