首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在call 3中获得正确的api调用

无法在call 3中获得正确的api调用
EN

Stack Overflow用户
提问于 2017-04-28 15:16:31
回答 1查看 95关注 0票数 0

我在postman中尝试了这个特定的API,它返回了一个很好的结果。

因此,我创建了一个参数

代码语言:javascript
复制
["JsonRequest": "{\"header\":\"GetLocationListReq\",\"accessKey\":\"fakeKey\"}"]

但是,当我在我的Xcode项目中使用pass和alamofire调用这个API时传递这个参数时,我总是会得到一个错误。

对于那些感兴趣的人,我的apiRouter是

代码语言:javascript
复制
    //
//  WINAPIRouter.swift
//  Winner21
//
//  Created by Lin Hairui on 27/4/17.
//  Copyright © 2017 Pioneers & Leaders (Publishers). All rights reserved.
//

import Foundation
import Alamofire

enum WINAPIRouter : URLRequestConvertible {
    static let baseURL = Constant.baseURL

    case get(String)
    case create([String:Any],String?)
    case delete(String)

    func asURLRequest() throws -> URLRequest {

        var method : HTTPMethod {
            switch self {
            case .get:
                return HTTPMethod.get
            case .create:
                return HTTPMethod.post
            case .delete:
                return HTTPMethod.delete
            }
        }


        let params:(Dictionary<String, Any>?) = {
            switch self {
            case .get, .delete:
                return nil
            case .create(let params, _):
                var fieldParams = params
                fieldParams["accessKey"] = Constant.kAPIAccessKey

                let jsonData: NSData
                do {
                    jsonData = try JSONSerialization.data(withJSONObject: fieldParams, options: JSONSerialization.WritingOptions()) as NSData
                    let jsonString = NSString(data: jsonData as Data, encoding: String.Encoding.utf8.rawValue) as! String
                    let authParam : [String : Any] = [
                        "JsonRequest" : jsonString
                    ]
                    print("google was here \(authParam)")
                    return authParam

                } catch _ {
                    print ("JSON Failure")
                }
                return nil
            }
        }()

        let url : URL = {
            return URL(string: Constant.baseURL)!
        }()

        var urlRequest = URLRequest(url: url)


//        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
//        urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
        urlRequest.httpMethod = method.rawValue
        print("facebook was here = \(urlRequest.httpMethod!)")

        let encoding = JSONEncoding.default
        print("yahoo was here \(params)")
        //let facejsonData = try! JSONSerialization.data(withJSONObject: params!, options: JSONSerialization.WritingOptions())
        return try encoding.encode(urlRequest, with: params!)
    }

}

并且,我使用以下函数调用API。

代码语言:javascript
复制
Alamofire.request(WINAPIRouter.create(params, nil)).responseJSON
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-28 16:09:56

我认为API的响应不在JSON中,尝试使用URL编码,如下所示,

代码语言:javascript
复制
Alamofire.request(path, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: nil) . responseString(completionHandler: { ( dataResponse ) in
                 /// print response

            })
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43683606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档