Кодирование параметров в Мойе - PullRequest
0 голосов
/ 19 марта 2020

Мой проект в Objective- C, и я конвертирую его в Swift. Проект Objective- C использует AFNetworking для работы в сети. В новом проекте swift я использую Moya.

Я создал цель Мойя с именем PhTrackerAPI,

public enum PhTrackerAPI {
    case login
    case checkNumberExist(phoneno: String, code: String)
    case todos
}

extension PhTrackerAPI: TargetType {
  public var baseURL: URL {
    return URL(string: "http://numberfinding.com/vaghani/call2loc/Api_c2l")!
  }

  public var path: String {
    switch self {
    case .login: return "/login"
    case .checkNumberExist: return "/check_number_exist"
    case .todos: return "/todos"
    }
  }

  public var method: Moya.Method {
    switch self {
    case .login, .checkNumberExist:
        return .post
    case .todos:
        return .get
    }
  }

  public var sampleData: Data {
    return Data()
  }

    var parameters: [String: Any]? {
        switch self {
        case .login:
            return [:]

        case .checkNumberExist(let phoneno, let code):
            return ["phone":phoneno,
                    "country_code":code]

        case .todos:
            return nil

        }
    }

  public var task: Task {
    switch self {
    case .login, .checkNumberExist:
        return .requestParameters(parameters: parameters!, encoding: JSONEncoding.default)
    default: return .requestPlain
    }
  }

  public var headers: [String: String]? {
    return ["Content-Type": "application/json"]
  }

  // 7
  public var validationType: ValidationType {
    return .successCodes
  }
}

Когда я запрашиваю API у Почтальона, он дает ответ, но если я вызываю его через Moya, он выдает ошибку "Параметр не найден". Почему возникает эта ошибка? Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ:

This is screenshot of Postman

1 Ответ

0 голосов
/ 21 марта 2020

Мой API хочет параметры в данных формы. Итак, я обновил задачу, как показано ниже, и теперь она отлично работает.

 var task: Task {
    switch self {
    case .checkNumberExist:
         var multipartData = [MultipartFormData]()
               for (key, value) in parameters! {
                   let formData = MultipartFormData(provider: .data("\(value)".data(using: .utf8)!), name: key)
                   multipartData.append(formData)
               }
               return .uploadMultipart(multipartData)
    default: return .requestPlain
    }
 }
...