Сбой Alamofire: invalidURL при использовании json для URL-адреса

#swift #alamofire

#swift #alamofire

Вопрос:

Мой код выборки, как показано ниже: тип URL-адреса — string, но когда я отправляю формат json в url, выдается ошибка. Пожалуйста, привет. я поделился своей функцией и экраном ошибки, как показано ниже.

 public func fetch<T:Codable> (headers:HTTPHeaders,_ method: HTTPMethod, url: String, requestModel: T?, model: T.Type, completion: @escaping (AFResult<Codable>) -> Void)
{
    AF.request(
        url,
        method: method,
        parameters: NetworkManager.toParameters(model: requestModel),
        encoding: JSONEncoding.default,
        headers: headers
    )
    .validate()
        .responseJSON { response in

        switch response.result {
            case .success(let value as [String: AnyObject]):
                do{
                    let responseJsonData = JSON(value)
                    let responseModel = try JSONDecoder().decode(model.self, from: responseJsonData.rawData())
                    completion(.success(responseModel))
                }
                catch let parsingError{
                    print("Success (error): (parsingError)")
                }

            case .failure(let error):
                    print("Failure: (error)")
                    completion(.failure(error))

                default: fatalError("Fatal error.")
                
            }
    }
}
  

Мой метод использования:

 import Foundation
import SwiftUI
import  Alamofire
import SwiftyJSON

class SorularController {
    
    var arraySorular:[Soru] = []
    public func GetSorularByDersId(dersId:Int,headers:HTTPHeaders,completion: @escaping ([Soru])->()){
        NetworkManager.instance.fetch(headers: headers, HTTPMethod.get, url: #"https://app.kivacrm.com/api/v1/data/osym/sorular?filters={"ders":["=",3]}"#, requestModel: nil, model: Soru.self) { (response) in
            switch(response)
            {
                case .success(let model):
                    let soruModel=model as! Soru
                self.arraySorular.append(soruModel)
            case .failure(_) :break
                
            }
        }
    }
  

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

Комментарии:

1. Вам нужно узнать о кодировке URL-адресов, w3schools.com/tags/ref_urlencode.ASP

Ответ №1:

Чтобы ваш URL-адрес был действительным, параметры get должны быть закодированы в url.

Попробуйте передать свой filters параметр в parameters dictionary и использовать URLEncoding вместо JSONEncoding для этого вызова:

 AF.request(
    "https://app.kivacrm.com/api/v1/data/osym/sorular",
    method: .get,
    parameters: ["filters": #"{"ders":["=",3]}"#],
    encoding: URLEncoding.default,
    headers: headers
)