12

我尝试Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders在 iOS 7 中使用我的自定义 HTTP 标头设置,但我没有运气。

这在 iOS 8 中运行良好。

有没有人有什么建议?

4

4 回答 4

7

我让它工作了。

这对 iOS7 没有影响:

Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["CustomHeader": customValue]

然而,这将适用于 iOS7 和 8:

var headers = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
    headers["CustomHeader"] = customValue

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.HTTPAdditionalHeaders = headers

    Alamofire
        .Manager(configuration: configuration)
        .request(.GET, "https://example.com/api/users", parameters: nil, encoding: .JSON)
于 2014-11-26T07:43:52.623 回答
1

我遇到了同样的问题,最后我想出了狼吞虎咽的解决方案。(我对原来的库做了一点改动,所以要小心!)

我一直在调用该方法:

public func request(method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL) -> Request

我注意到对该方法的调用:

private func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest

就在这个函数内部,我插入了一行代码:

mutableURLRequest.setValue(valueHeader, forHTTPHeaderField: keyHeader)

有以下结果(只是为了清楚):

private func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest {
    let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URL.URLString)!)
    mutableURLRequest.HTTPMethod = method.rawValue

    if(contentHeader){
        mutableURLRequest.setValue(valueHeader, forHTTPHeaderField: keyHeader!)
    }

    return mutableURLRequest
}

我还创建了一种传递值的方法。我希望这会奏效

于 2014-12-12T16:24:09.433 回答
1

我正在使用NSMutableURLRequest设置自定义标头。

检查这个例子。

var request = NSMutableURLRequest(URL: NSURL(string: "http://example.com")!)
request.HTTPMethod = "POST"
request.setValue("<HEADER VALUE>", forHTTPHeaderField: "<HEADER FIELD>")

var parameter: NSDictionary = ["dimensions" :["product" : ["name" : "macpro", "price" : "350"]]]
 request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameter, options: nil, error: nil)

Alamofire.request(request).response { (request, response, result, error) -> Void in
                // handle response
     println("\(request) \t \(response) \t \(result) \t \(error) ")
}
于 2015-01-23T14:02:49.387 回答
-1

以下是适用于 iOS 7 和 iOS 8 的完整代码

let URL = NSURL(string: request.url!)
var mutableURLRequest = NSMutableURLRequest(URL: URL!)
mutableURLRequest.HTTPMethod = Alamofire.Method.GET.rawValue

// Adding headers
var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = defaultHeaders

// Adding parameters
let manager = Alamofire.Manager(configuration: configuration)
let urlReq  = ParameterEncoding.URL.encode(mutableURLRequest, parameters: request.params).0
aReq = manager.request(urlReq)
aReq!.responseJSON { (req, response, JSON, error) in }

更多信息:Alamofire 问题 - GitHub

于 2015-02-09T08:10:13.323 回答