如何使用alamofire设置默认的http标头

时间:2015-07-01 12:13:58

标签: alamofire

我想设置一个标题,以便一旦用户登录,所有请求都包含一个授权令牌标题。我想我可以通过调用我的setToken函数在共享的alamofire管理器中设置标题,但我不这样做我想我做得对我的错是什么?是否有更好的方法为所有alamofire请求设置默认标头?

 class UserService : NSObject {

    static let manager: Alamofire.Manager = Alamofire.Manager(configuration:  NSURLSessionConfiguration.defaultSessionConfiguration())

    class func setToken(token:String){
        manager.session.configuration.HTTPAdditionalHeaders = [
            "x-token": token
        ]

    }

   class func addFriend(user:LoggedUser, uname:String, callback:((success: Bool, errorMsg: String?)->Void)) {

        let params:[String : AnyObject] = ["uname": uname]

        let url = AppConfig.sharedInstance().baseURL() + "/user/\(user.userId!)/friends"
        Alamofire.request(.POST, url , parameters:params, encoding:.JSON)
            .responseJSON(options: .MutableContainers, completionHandler:{ (request, response, JSON, error) -> Void in

        //token is not set in the request
    }

}

4 个答案:

答案 0 :(得分:0)

所以当我提出请求时,我的错误是使用了类函数而不是共享实例。

所以它应该是

Alamofire.Manager.sharedInstance.request(.POST, url , parameters:params, encoding:.JSON)

而不是

Alamofire.request(.POST, url , parameters:params, encoding:.JSON)

答案 1 :(得分:0)

您的代码永远不会使用您的自定义管理器,请使用以下代码:

class CustomManager: Manager {
    static public let manager = CustomManager.generateManager()
    class func generateManager()-> CustomManager {
        var defaultHeaders = Alamofire.Manager.defaultHTTPHeaders ?? [:]
        defaultHeaders["x-token""] = "token"
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.HTTPAdditionalHeaders = defaultHeaders
        let manager = CustomManager(configuration: configuration)
        return manager
    }
}

class UserService : NSObject {

   class func addFriend(user:LoggedUser, uname:String, callback:((success: Bool, errorMsg: String?)->Void)) {

        let params:[String : AnyObject] = ["uname": uname]

        let url = AppConfig.sharedInstance().baseURL() + "/user/\(user.userId!)/friends"
        CustomManager.manager(.POST, url , parameters:params, encoding:.JSON)
            .responseJSON(options: .MutableContainers, completionHandler:{ (request, response, JSON, error) -> Void in

        // ...
    }
}

答案 2 :(得分:0)

如果您在Alamofire 4中使用自定义SessionManager,现在在Alamofire 5中将其称为Session,则可以通过以下方式创建它:

 let configuration = URLSessionConfiguration.default
 var defaultHeaders = HTTPHeaders.default
 defaultHeaders["X-API-Version"] = "1.0"
 configuration.headers = defaultHeaders
 let yourManager = Alamofire.Session(configuration: configuration)

答案 3 :(得分:0)

创建一个符合协议RequestAdapter的类。您必须实现此函数 func adapt(_ urlRequest: URLRequest) throws -> URLRequest {。在里面做:

func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
    var urlRequest = urlRequest
    urlRequest.setValue("YourUserAgent", forHTTPHeaderField: "User-Agent")
    return urlRequest
}

在这个函数中你可以添加任何你想要的标题。

然后做:

sessionManager.adapter = "Class that conforms to RequestAdapter",其中 sessionManager 是您的 Alamofire SessionManager。