我想设置一个标题,以便一旦用户登录,所有请求都包含一个授权令牌标题。我想我可以通过调用我的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
}
}
答案 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。