带有令牌authentication的NSURLSession

我有我的iOS项目中的以下代码,我想转换为使用NSURLSession而不是NSURLConnection 。 我正在查询使用基于令牌的HTTP Authenticationscheme的REST API ,但我找不到如何执行此操作的示例。

 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"Username"]; NSString *token = //GET THE TOKEN FROM THE KEYCHAIN NSString *authValue = [NSString stringWithFormat:@"Token %@",token]; [request setValue:authValue forHTTPHeaderField:@"Authorization"]; if ([NSURLConnection canHandleRequest:request]){ [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; [NSURLConnection sendAsynchronousRequest:request queue:self.fetchQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if (!connectionError) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; if (httpResponse.statusCode == 200){ NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:nil]; //Process the data } } }]; } 

你可以使用NSURLSession来重写它,如下所示

  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; NSString *token ; //GET THE TOKEN FROM THE KEYCHAIN NSString *authValue = [NSString stringWithFormat:@"Token %@",token]; //Configure your session with common header fields like authorization etc NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; sessionConfiguration.HTTPAdditionalHeaders = @{@"Authorization": authValue}; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; NSString *url; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; if (!error) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; if (httpResponse.statusCode == 200){ NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:nil]; //Process the data } } }]; [task resume]; 

这是在斯威夫特,但逻辑是一样的:

  let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() let url = NSURL(string: "some url") let request = NSMutableURLRequest(URL: url!) request.setValue("value", forHTTPHeaderField: "header field") let urlSession = NSURLSession(configuration: sessionConfig, delegate: self, delegateQueue: NSOperationQueue.mainQueue()) let dataTask = urlSession.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in } dataTask.resume()