我构建了一个Alamofire路由器,出于某种原因,当我发出请求呼叫时(使用我的路由器,我收到了构建错误,如下所示。
我真的不知道为什么我的路由器不能正常工作,因为这是我为上一个项目构建路由器的方式而且工作正常......
以下是我的路由器的代码:
enum Router: URLRequestConvertible {
static var baseRequestURL = ""
case GetAnAccessToken
case ListAllVehicles
case MobileAccess
var URLRequest: NSMutableURLRequest {
var result: String = {
switch self {
case .GetAnAccessToken:
Router.baseRequestURL = NetworkingVariables.loginURL
return ("")
case .ListAllVehicles:
Router.baseRequestURL = NetworkingVariables.baseURL
return ("")
case .MobileAccess:
Router.baseRequestURL = NetworkingVariables.baseURL
return ("/vehicle_id/mobile_enabled")
}
}()
let baseEndpointURL = NSURL(string: Router.baseRequestURL)
let endpointRequest = NSMutableURLRequest(URL: baseEndpointURL!.URLByAppendingPathComponent(result))
return endpointRequest
}
}
这是我的Alamofire电话:
Alamofire.request(.POST, Networking.Router.GetAnAccessToken , parameters: parameters)
.responseJSON() { response in
我需要在路由器中修改哪些内容才能正确处理URLRequest,以便我可以成功完成HTTP请求?
答案 0 :(得分:0)
有两个Alamofire.request
个签名,一个采用URLRequestConvertible而另一个采用URLStringConvertible,你混合了两个。
我还没有对它进行测试,但我认为以下内容可行:
Alamofire.request(.POST, Networking.Router.GetAnAccessToken.URLRequest , parameters: parameters)
答案 1 :(得分:0)
您的路由器正在创建网址请求。但它也应该在URL请求上设置HTTP方法(.POST)和参数。因此,在调用Alamofire.request()时,您不会单独传递它们,因为它们是URL请求的一部分。因此,您的.request
电话应如下所示:
Alamofire.request(Networking.Router.GetAnAccessToken.URLRequest)
以下是设置HTTP方法和params的路由器示例:
import Foundation
import Alamofire
enum PostRouter: URLRequestConvertible {
static let baseURLString = "http://jsonplaceholder.typicode.com/"
case Get(Int)
case Create([String: AnyObject])
case Delete(Int)
var URLRequest: NSMutableURLRequest {
var method: Alamofire.Method {
switch self {
case .Get:
return .GET
case .Create:
return .POST
case .Delete:
return .DELETE
}
}
let params: ([String: AnyObject]?) = {
switch self {
case .Get, .Delete:
return (nil)
case .Create(let newPost):
return (newPost)
}
}()
let url:NSURL = {
// build up and return the URL for each endpoint
let relativePath:String?
switch self {
case .Get(let postNumber):
relativePath = "posts/\(postNumber)"
case .Create:
relativePath = "posts"
case .Delete(let postNumber):
relativePath = "posts/\(postNumber)"
}
var URL = NSURL(string: PostRouter.baseURLString)!
if let relativePath = relativePath {
URL = URL.URLByAppendingPathComponent(relativePath)
}
return URL
}()
let URLRequest = NSMutableURLRequest(URL: url)
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
encodedRequest.HTTPMethod = method.rawValue
return encodedRequest
}
}
中的代码