Vas*_*ily 19 iphone asihttprequest http-status-code-304 ios afnetworking
我找不到任何问题的答案,可能是我错过了什么......
当我要求提供网址时,我需要知道响应是来自缓存还是来自网络.
状态代码是304还是200?(但AFNetworking总是回应200)
随着ASIHTTPRequest我用来检查" didUseCachedResponse"从ASIHTTPRequest,这是完美的.
Dar*_*ski 24
我想我找到了一个解决方案来确定是否使用AFNetworking 2.0从缓存返回响应.我发现每次从服务器(状态200,而不是304)返回一个新的响应时cacheResponseBlock,AFHTTPRequestOperation都会调用它的属性.NSCachedURLResponse如果响应应该缓存,则块应返回,否则应返回nil.这样您就可以过滤响应并仅缓存其中一些响应.在这种情况下,我正在缓存来自服务器的所有响应.诀窍是,当服务器发送304并从缓存加载响应时,将不会调用此块.所以,这是我正在使用的代码:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
BOOL __block responseFromCache = YES; // yes by default
void (^requestSuccessBlock)(AFHTTPRequestOperation *operation, id responseObject) = ^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseFromCache) {
// response was returned from cache
NSLog(@"RESPONSE FROM CACHE: %@", responseObject);
}
else {
// response was returned from the server, not from cache
NSLog(@"RESPONSE: %@", responseObject);
}
};
void (^requestFailureBlock)(AFHTTPRequestOperation *operation, NSError *error) = ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
};
AFHTTPRequestOperation *operation = [manager GET:@"http://example.com/"
parameters:nil
success:requestSuccessBlock
failure:requestFailureBlock];
[operation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
// this will be called whenever server returns status code 200, not 304
responseFromCache = NO;
return cachedResponse;
}];
Run Code Online (Sandbox Code Playgroud)
这个解决方案对我有用,到目前为止我还没有发现任何问题.但是,如果您对我的解决方案有更好的想法或反对意见,请随时发表评论!
| 归档时间: |
|
| 查看次数: |
10633 次 |
| 最近记录: |