为什么我的Alamofire路由器没有给我正确的URL请求?

时间:2016-03-16 23:43:56

标签: ios swift alamofire

我构建了一个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请求?

2 个答案:

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

我的博文https://grokswift.com/router/

中的代码