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
)
我的 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
)