2015-09-24 14 views
5

Ich versuchte benutzerdefinierte Header mit diesem hinzuzufügen:Swift Alamofire hinzufügen benutzerdefinierte Header auf alle Anfragen

let manager = Manager.sharedInstance 
manager.session.configuration.HTTPAdditionalHeaders = [ 
    "Authorization": "Token \(token)" 
] 

Aber es funktioniert nicht, was mache ich falsch?

Ich muss dies nach dem Login hinzufügen, so dass Header in allen Anfragen verwendet wird.

Antwort

4

Ich weiß nicht, wo Sie das tun, aber meine AlomoFire Anfragen wie folgt aussehen:

Alamofire.request(.GET, urlPath, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseJSON() { (req,res, data, error) in //blah blah } 

Meine Vermutung ist, dass Sie

Ihre Header-Informationen in das Header-Array setzen können
+2

es Header für nur eine Anforderung stellt, aber Mirza Delic gefragt, wie –

+0

benutzerdefinierte Header auf die alle Anforderung setzen @ Glenn Header-Informationen in das Header-Array oder Dictionary –

1

Sie nicht Authorization anhängen soll Header auf diese Weise. Sie sollten immer mit dem headers Parameter in der request Methode wie von @Glenn angezeigt werden.

Wenn Sie weitere Header an eine Konfiguration anhängen müssen, müssen Sie eine benutzerdefinierte Konfiguration erstellen, die Headerwerte festlegen und dann eine neue Manager Instanz mit der neuen Konfiguration erstellen. Das Hinzufügen von Kopfzeilen zu einer Konfiguration, nachdem diese bereits zum Erstellen einer URL-Sitzung verwendet wurde, führt zu einem nicht definierten Verhalten, je nachdem, auf welcher Version des Betriebssystems Sie ausgeführt werden. Wir haben viele Tests in Alamofire, die dieses unterschiedliche Verhalten demonstrieren.

2

Ich wurde müde, die gesamte App manuell zu ersetzen, indem ich Header zu mehr als 100 meiner Anfragen hinzufüge. Ich entschied ich für einen faulen Ansatz:

ein AlamofireManagerExtension.swift Stellen und den folgenden Code verwenden:

import Foundation 
import Alamofire 

extension Manager { 
    public func myRequest(
     method: Alamofire.Method, 
     _ URLString: URLStringConvertible, 
     parameters: [String: AnyObject]? = nil, 
     encoding: ParameterEncoding = .URL, 
     headers: [String: String]? = ["MY-STATIC-API-KEY" : "BLAHBLAHBLAH"]) 
     -> Request 
    { 
     return Manager.sharedInstance.request(
      method, 
      URLString, 
      parameters: parameters, 
      encoding: encoding, 
      headers: headers 
     ) 
    } 
} 

Dann Strg-Shift-f auf Ihrem Xcode-Projekt, suchen Sie nach sharedInstance.request oder was auch immer Sie tun, um Anfragen zu machen (all mein Code folgt diesem Muster) und ersetze es durch sharedInstance.myRequest (Achten Sie darauf, die Erweiterung sharedInstance.request nicht zu ändern) und voila:

Globaler geänderter benutzerdefinierter Header für alle Anfragen!

Wenn Sie benutzerdefinierte Schlüssel hinzufügen möchten, können Sie natürlich Methoden mit der Methode replace wie sharedInstance.request (Methode: ...) an sharedInstance.myRequest (customKeys: ..., Methode: ..) voranstellen. .) wenn Sie benutzerdefinierte Variablen benötigen.

Verwandte Themen