El object de respuesta de Alamofire devuelve el código de estado 200 cuando el server de Rails regresa 304

Cuando envío una request al server de Rails y no se modifica 304, el código de estado de devolución del object de respuesta de almofire 200. ¿Cómo puedo cambiar mi request para get el código de estado 304 que devuelve mi server de Rails? Instalé Alamofire con cocoapods.

EDITAR

Este mi código actualmente (no funciona):

if Reachability.isConnectedToNetwork() { let urlreq = NSMutableURLRequest(URL: NSURL(string: API.feedURL())!,cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData , timeoutInterval: 5000) Alamofire.request(.GET, urlreq, parameters: ["category_name":category],encoding: ParameterEncoding.URL, headers: API.getHeaders()) .validate(statusCode: 200..<500) .responseJSON { request, response, result in switch result { case .Success(let data): let statusCode = response!.statusCode as Int! if statusCode == 304 { completionHandler(didModified: false, battlesArray: []) } else if statusCode == 200 { let json = JSON(data) var battlesArray : [Battle] = [] for (_,subJson):(String, JSON) in json["battles"] { battlesArray.append(Battle(json: subJson)) } completionHandler(didModified: true, battlesArray: battlesArray) } case .Failure(_, let error): print ("error with conneciton:\(error)") } SVProgressHUD.dismiss() } else { //nothing important } 

Este es el código después de la respuesta kpsharp (no funciona):

 if Reachability.isConnectedToNetwork() { let urlreq = NSMutableURLRequest(URL: NSURL(string: API.feedURL()+"?category_name=Popular")!,cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData , timeoutInterval: 5000) urlreq.HTTPMethod = "GET" let headers = API.getHeaders() for (key,value) in headers { urlreq.setValue(value, forHTTPHeaderField: key) } urlreq.cachePolicy = .ReloadIgnoringLocalAndRemoteCacheData Alamofire.request(urlreq) } else { //nothing interesting } 

EDIT 2

Mi código de Rails para el almacenamiento en caching:

 def index battles = Battle.feed(current_user, params[:category_name], params[:future_time]) @battles = paginate battles, per_page: 50 if stale?([@battles, current_user.id], template: false) render 'index' end end 

Gracias

Este es un problema conocido en Alamofire ya.

cnoon , un miembro de Alamofire, recomendó esto:

Gran pregunta … totalmente posible. Debe utilizar el URLRequestConvertible en combinación con un NSMutableURLRequest para anular el cachePolicy para esa request en particular. Mira la documentation y verás lo que quiero decir.

EDIT: En respuesta a su comentario, le proporcionaré un código rápido que con suerte aclarará las cosas.

Entonces, el problema es que tienes una respuesta almacenada en caching. Para la mayoría de los casos de uso, devolver un 200 cuando recibiste un 304 está bien, después de todo, el server aceptó la request sin problema y solo informa que no hubo cambios. Sin embargo, para lo que sean sus necesidades, realmente necesita ver el 304, que es válido, pero debemos ignorar la respuesta en caching para hacerlo.

Entonces, cuando esté elaborando su request, seguiría la documentation de Alamofire para crear algo como esto:

 let URL = NSURL(string: "https://httpbin.org/post")! let mutableURLRequest = NSMutableURLRequest(URL: URL) mutableURLRequest.HTTPMethod = "POST" let parameters = ["foo": "bar"] do { mutableURLRequest.HTTPBody = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions()) } catch { // No-op } mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") 

Así es como se vería una request normal. Sin embargo, tenemos que anular el cachePolicy para el mutableURLRequest así:

 mutableURLRequest.cachePolicy = .ReloadIgnoringLocalAndRemoteCacheData 

Después de eso, solo déle una patada a Alamofire para que envíe:

 Alamofire.request(mutableURLRequest)