首页 > 解决方案 > Alamofire 5:不尊重自定义 HTTP 标头

问题描述

我按照 Medium 上的本教程为新的 Alamofire 5 分支编写了一个路由器: https ://medium.com/@AladinWay/write-a-networking-layer-in-swift-4-using-alamofire-and-codable-第 1 部分-api-router-349699a47569

示例路由器在这里: https ://github.com/AladinWay/NetworkingExample/blob/master/Networking/APIClient/APIRouter.swift

标题设置如下:

// Common Headers
urlRequest.setValue(ContentType.json.rawValue, forHTTPHeaderField: HTTPHeaderField.acceptType.rawValue)
urlRequest.setValue(ContentType.json.rawValue, forHTTPHeaderField: HTTPHeaderField.contentType.rawValue)

但是,当我查看 Charles Proxy 时,标题实际上并没有正确设置:

在此处输入图像描述

因此,本教程中的代码库似乎无法实现它声称的功能。

您可以通过克隆和运行项目在您的计算机上本地复制并验证标头未在任何数据包嗅探器中设置:

git 克隆https://github.com/AladinWay/NetworkingExample.git

我想使用 Alamofire 5,但我如何才能在请求中正确设置标头?我假设我需要用我自己的 URLSessionConfiguration 配置 Alamofire - 像这样?

import Alamofire

class APIClient {
@discardableResult
private static func performRequest<T:Decodable>(route:APIRouter,
                                                decoder: JSONDecoder = JSONDecoder(),
                                                completion:@escaping (Result<T>)->Void) -> DataRequest {

    var defaultHeaders = Alamofire.SessionManager.defaultHTTPHeaders
    defaultHeaders["Content-Type"] = "application/json"
    defaultHeaders["Accept"] = "application/json"

    let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = defaultHeaders

    let manager = Alamofire.SessionManager(configuration: configuration)

    return manager.request(route).responseJSONDecodable (decoder: decoder){ (response: DataResponse<T>) in
            completion(response.result)
    }
}

我试过这个,但没有用。我是 Alamofire 5 的新手,所以我还不确定如何使用它。

帮助!

标签: iosswiftalamofire

解决方案


推荐阅读