将带有Alamofire的多类型参数发送到API-Swift

将带有Alamofire的多类型参数发送到API-Swift,swift,alamofire,Swift,Alamofire,我需要向API发送两个参数,如bellow和Alamofire: function:String和json:ModelPostFiltersShort 函数:字符串:这是一个字符串名称 这个(json:ModelPostFiltersShort)参数如下所示: struct ModelPostFiltersShort: Codable { var languages, types: [String] var categories: [Int] var page: Int

我需要向
API
发送两个参数,如bellow和
Alamofire

function:String
json:ModelPostFiltersShort

函数:字符串
:这是一个字符串名称

这个(
json:ModelPostFiltersShort
)参数如下所示:

struct ModelPostFiltersShort: Codable {
    var languages, types: [String]
    var categories: [Int]
    var page: Int
}
@POST("/web_service/mobile/rest")
Observable<Response<List<GetShortTermCoursesModel>>> getResultFilters(@Query("function") String function,
                                                                      @Body SendFiltersShortCourseModel sendFiltersShortCourseModel);
如何将这些参数与Alamofire一起发送

let params : [String : ?] = ["function": function,"??": ??]

Alamofire.request(url, method: .get, parameters: params????).responseJSON {
}

在android中,我发送的值如下:

struct ModelPostFiltersShort: Codable {
    var languages, types: [String]
    var categories: [Int]
    var page: Int
}
@POST("/web_service/mobile/rest")
Observable<Response<List<GetShortTermCoursesModel>>> getResultFilters(@Query("function") String function,
                                                                      @Body SendFiltersShortCourseModel sendFiltersShortCourseModel);
@POST(“/web\u服务/mobile/rest”)
可观察的getResultFilters(@Query(“函数”)字符串函数,
@Body SendFiltersShortcoursModel SendFiltersShortcoursModel);

@Body SendFiltersShortCoursModel SendFiltersShortCoursModel
参数没有名称

使用
jsonecoder
modelpostersshort的
实例获取
数据
,然后使用
String的
init(数据:编码:)
将其转换为
字符串
,即

do {
    let data = try JSONEncoder().encode(obj) //this is body of the request
    let params = ["function": function] //these are query params
    if let url = URL(string: "YOUR_URL") {
        var urlRequest = URLRequest(url: url) // create url request
        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
        urlRequest.httpBody = data
        //now create Alamofire request here...
    }
} catch {
    print(error)
}

obj
是类型
ModelPostFiltersShort
的实例,使用
jsonecoder
ModelPostFiltersShort的
实例获取
数据
,然后使用
字符串的
初始化(数据:编码:),即

do {
    let data = try JSONEncoder().encode(obj) //this is body of the request
    let params = ["function": function] //these are query params
    if let url = URL(string: "YOUR_URL") {
        var urlRequest = URLRequest(url: url) // create url request
        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
        urlRequest.httpBody = data
        //now create Alamofire request here...
    }
} catch {
    print(error)
}

obj
是类型
ModelPostFiltersShort

的实例,用于创建包含所有主体的模型(请求参数)

使用下面的代码准备并发送请求

func sendRequest() {

        let requestParameters = RequestParameters(languages: ["fa"], types: ["modular"], categories: [70], page: 1)
        // create full parameters model

        let encoder = JSONEncoder() // create encoder to encode your request parameters to Data

        guard let data = try? encoder.encode(requestParameters) else {
            return
        } // create data

        let url = URL(string: "https://reg.mou.ir/web_service/mobile/rest?function=getShortTermCourses")! // create url

        var urlRequest = URLRequest(url: url) // create url request

        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type") // add all the headers you need

        urlRequest.httpBody = data // add your parameters
        urlRequest.httpMethod = "POST"

        // send your request
        Alamofire.request(urlRequest).responseString { (response) in
            switch response.result {
            case .success(let responseString):
                print("Success: \(responseString)") // get your response here
            case .failure(let error):
                print("Error: \(error.localizedDescription)") // get error if it appears here
            }
        }
    }

创建包含所有实体的模型(请求参数)

使用下面的代码准备并发送请求

func sendRequest() {

        let requestParameters = RequestParameters(languages: ["fa"], types: ["modular"], categories: [70], page: 1)
        // create full parameters model

        let encoder = JSONEncoder() // create encoder to encode your request parameters to Data

        guard let data = try? encoder.encode(requestParameters) else {
            return
        } // create data

        let url = URL(string: "https://reg.mou.ir/web_service/mobile/rest?function=getShortTermCourses")! // create url

        var urlRequest = URLRequest(url: url) // create url request

        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type") // add all the headers you need

        urlRequest.httpBody = data // add your parameters
        urlRequest.httpMethod = "POST"

        // send your request
        Alamofire.request(urlRequest).responseString { (response) in
            switch response.result {
            case .success(let responseString):
                print("Success: \(responseString)") // get your response here
            case .failure(let error):
                print("Error: \(error.localizedDescription)") // get error if it appears here
            }
        }
    }

告诉我这个错误:Alamofire.AFError.responseSerializationFailed(原因:Alamofire.AFError.ResponseSerializationFaileureReason.InputDataNilorZerothwhere您传递了这些参数吗?在android中,我发送的值如下:@POST(“/web\u service/mobile/rest”)可观察的getResultFilters(@Query(“函数”)字符串函数,@Body SendFiltersShortCoursModel SendFiltersShortCoursModel);此
@Body SendFiltersShortCoursModel SendFiltersShortCoursModel
参数没有名称!!但您使用的是“json”名称???告诉我这个错误:Alamofire.AFError.responseSerializationFailed(原因:Alamofire.AFError.ResponseSerializationFaileureReason.InputDataNilorZerothWhere您传递了这些参数吗?在android中,我发送了如下值:@POST(“/web_service/mobile/rest”)可观察的getResultFilters(@Query(“函数”)字符串函数,@Body SendFiltersShortCoursModel SendFiltersShortCoursModel);此
@Body SendFiltersShortCoursModel SendFiltersShortCoursModel
参数没有名称!!但您使用的是“json”名称???@Dmitry。获取结果但不使用过滤器(设modelPostFiltersShort=modelPostFiltersShort(语言:[“en”],类型:[“some”],类别:[1,2,3],第10页))从API中获取所有值。@jo jo.我需要查看API的文档。现在我猜不出哪里出了问题。可能有些键错了或其他什么东西。@Dmitry.Thank's doll@Dmitry.get me result但不使用过滤器(让modelPostFiltersShort=modelPostFiltersShort(语言:[“en”],类型:[“some”],类别:[1,2,3],第10页)从API中获取所有值。@jo-jo。我需要查看您的API文档。现在我猜不出是什么错了。可能有些键错了,或者是其他什么东西。@Dmitry。非常感谢。