Alamofire 失败:当我在 url 上使用 json 时无效的 URL

Alamofire Failure: invalidURL when i using json on url

我的 below:Url 类型的获取代码是字符串,但是当我将 json 格式发送到 url 时,出现错误。 请 hel.i 分享我的功能和错误屏幕如下。

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
                
            }
        }
    }

为了使您的 URL 有效,get 参数必须 url 编码。

尝试将您的 filters 参数传递给 parameters 字典并使用 URLEncoding 而不是 JSONEncoding 进行此调用:

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