返回 POST 请求的 Alamofire 路由器
Posted
技术标签:
【中文标题】返回 POST 请求的 Alamofire 路由器【英文标题】:Alamofire Router that returns POST request 【发布时间】:2015-06-03 22:13:40 【问题描述】:阅读RAYWENDERLICH Alamofire tutorial后,我决定自己构建路由器,除了一些细节,它工作正常。它返回GET
请求,但我需要POST
请求。我花了一些时间尝试在路由器中设置HTTPMethod = "POST"
,但可能是因为缺乏经验,我做错了并且出现了一些错误。那么我究竟需要在路由器中进行哪些更改才能使其返回POST
请求?
她是我的密码
enum Router: URLRequestConvertible
static let baseURLString = "http://www.com"
case Friends(Int)
var URLRequest: NSURLRequest
let (path: String, parameters: [String: AnyObject]) =
switch self
case .Friends (let ID):
let params = ["userID": "\(ID)"]
return ("/getFriends.php", params)
()
let URL = NSURL(string: Router.baseURLString)
let URLRequest = NSURLRequest(URL: URL!.URLByAppendingPathComponent(path))
let encoding = Alamofire.ParameterEncoding.URL
return encoding.encode(URLRequest, parameters: parameters).0
【问题讨论】:
对我来说一切都很好,尝试将 let URLRequest 重命名为其他名称(resultRequest 等),因为您已经在外部范围上有一个名为 URLRequest 的变量,您还必须添加行 resultRequest.HTTPMethod = “发布” 编辑帖子并输入教程的链接,我将文本加粗,以便人们更容易理解您的尝试。 @Kaan Dedeoglu 我尝试在 let URLRequest = NSURLRequest(URL: URL!.URLByAppendingPathComponent(path)) 之后添加 URLRequest.HTTPMethod = "POST" 但它给了我以下错误“无法分配给'URLRequest' 中的'HTTPMethod' " 使用 NSMutableURLRequest 代替 NSURLRequest @Kaan Dedeoglu 非常感谢,问题解决了,我知道有一个简单的解决方案 【参考方案1】:简单的解决方案与 swift 3+ 和 Alamofire 4+
import Foundation
import Alamofire
public enum mRouter: URLRequestConvertible
static let baseURLString = "baseURL"
static let token = "token"
case profile
case timeline
public func asURLRequest() throws -> URLRequest
var method: HTTPMethod
switch self
case .profile:
return .get
case .timeline:
return .post
let params: ([String: Any]?) =
switch self
case .profile(let Id):
return (["id": Id])
case .timeline:
return nil
()
let url: URL =
let relativePath: String?
switch self
case .profile:
relativePath = "profile"
case .timeline:
relativePath = "timeline"
var url = URL(string: mRouter.baseURLString)!
if let relativePath = relativePath
url = url.appendingPathComponent(relativePath)
return url
()
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = method.rawValue
urlRequest.setValue(mRouter.token, forHTTPHeaderField: "Authorization")
let encoding = JSONEncoding.default
return try encoding.encode(urlRequest, with: params)
【讨论】:
【参考方案2】:完美地遵循代码 :) 感谢@Kaan Dedeoglu
enum Router: URLRequestConvertible
static let baseURLString = "http://www.com"
case Friends(Int)
var URLRequest: NSURLRequest
let (path: String, parameters: [String: AnyObject]) =
switch self
case .Friends (let ID):
let params = ["userID": "\(ID)"]
return ("/getFriends.php", params)
()
let URL = NSURL(string: Router.baseURLString)
let URLRequest = NSMutableURLRequest(URL: URL!.URLByAppendingPathComponent(path))
URLRequest.HTTPMethod = "POST"
let encoding = Alamofire.ParameterEncoding.URL
return encoding.encode(URLRequest, parameters: parameters).0
【讨论】:
@iMemon 我已经弄明白了,反正谢谢你的好回答以上是关于返回 POST 请求的 Alamofire 路由器的主要内容,如果未能解决你的问题,请参考以下文章
带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数
带有嵌套参数的 Alamofire POST 请求不返回任何内容
请求 REST POST API 在 Postman 中工作,但在 Alamofire 中不起作用
Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析