2

在我看来,执行此操作的正确位置是AFURLSessionManager在设置taskWillPerformHTTPRedirection块中,但我不确定处理它的最佳方法。

目前,在我的AFHTTPSessionManager子类中,我正在为所有请求全局设置重定向块,并且我知道我可以通过返回nil此处来防止重定向:

- (void)setupRedirectBlock {
    [self setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest *(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request) {
        return nil;
    }];
}

...但我只需要对特定任务执行此操作,而且似乎没有办法从任务本身获取此信息。

我想我正在寻找某种用户信息字典或者我可以用来设置一个标志的东西,告诉这个方法要么 returnrequest要么 return nil。目前,看起来我必须对远离实际创建任务和路径的客户端中的响应/请求 URL 进行字符串比较。

所以这引出了一个问题,我是在违背惯例,还是真的没有更好的方法来逐个任务地拦截 AFNetworking 2.0 重定向?

4

2 回答 2

6

setTaskWillPerformHTTPRedirectionBlock是拦截重定向的最佳方式。会话管理器负责根据与任务关联的请求确定何时或何时不阻止重定向。在大多数情况下,请求的路径应该是一个足够的确定,但用户可以在自定义请求头字段中额外标记信息。

于 2014-04-14T19:41:20.787 回答
0

我有同样的问题,但不幸的是我还没有足够好的答案。一种解决方法可能是使用 taskDescription https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionTask_class/Reference/Reference.html#//apple_ref/occ/instp/NSURLSessionTask/taskDescription

只需放一些常量,如 DO_NOT_FOLLOW_REDIRECT 并在 setTaskWillPerformHTTPRedirectionBlock 块中检查它。

于 2014-04-14T13:04:10.267 回答