Я следовал этому руководству на Medium, чтобы написать роутер для новой ветки Alamofire 5:
https://medium.com/@AladinWay/write-a-networking-layer-in-swift-4-using-alamofire-and-codable-part-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 clone https://github.com/AladinWay/NetworkingExample.git
Я бы хотел использовать Alamofire 5, но как мне на самом деле заставить заголовки правильно устанавливать запрос? Я предполагаю, что мне нужно настроить Alamofire с моей собственной URLSessionConfiguration - что-то вроде этого?
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, поэтому пока не знаю, как с ним работать.
Помощь!