【问题标题】:Alamofire URLRequestConvertible global headersAlamofire URLRequestConvertible 全局标头
【发布时间】:2020-10-07 01:27:41
【问题描述】:

最近,我将旧的 Alamofire 请求替换为 URLRequestConvertible 协议,例如,国家/地区路由是这样的:

enum CountryRoute: URLRequestConvertible {

    case countries

    var path: String {
        switch self {
        case .countries : return Path.Common.countries.rawValue
        }
    }

    var method: HTTPMethod {
        return .get
    }

    public var headers: HTTPHeaders {
        return ["X-Mode" : "Light"]
    }

    func asURLRequest() throws -> URLRequest {
        let url = try "example.com".asURL()
        var request = URLRequest(url: url.appendingPathComponent(path))
        request.httpMethod = method.rawValue
        request.headers = headers
        request.timeoutInterval = TimeInterval(10*1000)
        return try URLEncoding.default.encode(request,with: nil)
    }
}

最后的请求是这样的:

shared.session.request(convertible).validate().responseData { (response) in   
    // Do something    
}

据我了解,我们为每个路由设置了标头,但是如果我们有像 "Content-Type""Accept-Language" 甚至 这样的全局标头怎么办>不记名令牌

有什么方法可以防止添加重复的标题并在全局范围内添加它们?还是我们必须将这些标头添加到每个路由?

【问题讨论】:

    标签: swift http-headers alamofire


    【解决方案1】:

    当您使用默认的Session 时,Alamofire 已经为整个会话生成了一些标头:

    let session = Session.default
    

    AF 引用(在后台使用默认的Session

    这些默认标头包括 Accept-EncodingAccept-LanguageUser-Agent。至于 Content-Type 标头,URLEncodingJSONEncoding 负责设置正确的值。 (JSONParameterEncoderURLEncodedFormParameterEncoder 当您将 Encodable 类型作为参数传递时)

    但是,您可以通过使用自己的 URLSessionConfiguration 创建新的 Session 来覆盖这些标头:

    let configuration = URLSessionConfiguration.af.default // Alamofire's default URLSessionConfiguration
    configuration.headers["Content-Type"] = "application/json"
    let session = Session(configuration: configuration)
    

    注意:对于 Bearer 令牌,有一种机制需要实现RequestInterceptor 协议才能拦截每个请求并附加正确的标头。使用相同的协议,您还可以提供刷新令牌功能。

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 2012-09-13
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2017-03-08
      • 2015-08-04
      相关资源
      最近更新 更多