Не удалось выполнить запрос GET с параметром, используя Alamofire

Использование Alamofire для сетевых вызовов. Мое требование: нужно отправить тело в запросе GET. Пробовали приведенный ниже код

func getForms(formTypes: [Int], userInterestIds:[Int], completionHandler: @escaping (_ status: Bool, _ response : GetArticleApiResponse?, _ error: Error?) -> Void) {

let headers = [
    "Authorization" : "dfkjl23ksldjk3kd3",
    "Content-Type": "application/json"
]
var parameters: Parameters = [:]
parameters["post_types"] = formTypes
parameters["usr_intrst_ids"] = userInterestIds

Alamofire.request(finalUrl, method: .get, parameters: parameters, headers: headers).responseJSON { response in
    switch response.result {
    case .success:
        completionHandler(true,responseData, nil)
    case .failure(let error):
        completionHandler(false,nil,error)
    }
}

Однако ожидаемого ответа не получил. Если я делаю неправильно. Помогите мне, как реализовать приведенный ниже вызов почтальона.

введите здесь описание изображения

Заранее спасибо.


person Ramdhas    schedule 27.06.2019    source источник
comment
Не похоже, что вы используете Params в Postman.   -  person Don    schedule 27.06.2019
comment
Вы показываете некоторый API .../forms API с запросом GET на изображении, пытаясь фильтровать API в коде. filter API также принимает параметры, это должен быть POST-запрос.   -  person Ankit Jayaswal    schedule 27.06.2019
comment
@Дон Спасибо за ответ. Хорошо, мое требование - отправить тело в вызове GET. Как сделать. Теперь я обновил свой вопрос.   -  person Ramdhas    schedule 28.06.2019
comment
@AnkitJayaswal Спасибо за ответ. Да, даже я попросил сделать вызов POST, но бэкэнд-разработчик говорит, что это должно быть вызовом GET. Наконец, я сомневаюсь, можно ли с помощью alamofire сделать этот вызов успешным. Пожалуйста, проверьте изображение почтальона   -  person Ramdhas    schedule 28.06.2019
comment
попробуйте отправить такие параметры, как эти параметры var: Parameters = [post_types: formTypes, usr_intrst_ids: userInterestId]   -  person channu    schedule 28.06.2019
comment
Не работает, как ожидалось. Сервер не может прочитать тело запроса.   -  person Ramdhas    schedule 28.06.2019
comment
попробуйте добавить кодировку: JSONEncoding.default в запросе alamofire   -  person Samir Shaikh    schedule 28.06.2019
comment
Пробовал не работает. Пробовал пользовательскую кодировку тоже. Не повезло   -  person Ramdhas    schedule 28.06.2019


Ответы (1)


Лично я бы использовал Struct, соответствующий протоколу Codable.

struct MyStruct: Codable {
  var post_types: [Int]
  var usr_intrst_ids: [Int]
}

func getForms(formTypes: [Int], userInterestIds:[Int], completionHandler: @escaping (_ status: Bool, _ response : GetArticleApiResponse?, _ error: Error?) -> Void) {

  let myStruct = MyStruct(post_types: formTypes, usr_intrst_ids: userInterestIds)

  do {
    json = try JSONEncoder().encode(myStruct)
    var request = URLRequest(url: finalUrl)
    request.httpMethod = HTTPMethod.get.rawValue
    request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    request.setValue("dfkjl23ksldjk3kd3", forHTTPHeaderField: "Authorization")
    request.httpBody = json

    Alamofire.request(request).responseJSON { response in
      ...
    }
  } catch { // unable to encode myStruct }
person Don    schedule 29.06.2019