如何在 request.http POST 方法的正文中传递动态参数
Posted
技术标签:
【中文标题】如何在 request.http POST 方法的正文中传递动态参数【英文标题】:How to pass dynamic parameters in requst.httpBody of POST method 【发布时间】:2016-12-21 13:07:51 【问题描述】:在 xcode 7.3 我更新到 xcode 8.2 和 swift 3 之前,我一直可以正常访问我的网络服务,现在我的应用程序崩溃了,这是我的代码
func jsonParsingFromURL () throws
let WSLink = "http://XXXXX.co/itXXXXMS/webservice.asmx/GXXXXXX"
let url = URL(string: WSLink)
let bodyData = "lastlogindate=\(todayDate)&CompanyId=\(compID)" //problem is here
let request:NSMutableURLRequest = NSMutableURLRequest(url:url!)
request.httpMethod = "POST"
request.httpBody = bodyData.data(using: String.Encoding.utf8);
NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) (response, data, error) in
guard let _ = data else return
self.startParsing(data!)
func startParsing(_ data :Data)
//Am getting error here in this line
let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary
arrDict.removeAllObjects()
for i in 0 ..< (dict.value(forKey: "results") as! NSArray).count
arrDict.add((dict.value(forKey: "results") as! NSArray) .object(at: i))
json 文本不是以数组或对象开头,并且选项允许 片段未设置
其实我找到了错误的原因,但不知道如何解决它。
当我写为时,让 bodyData = "lastlogindate=26/11/2016&CompanyId=3" //它正在工作。
当我将参数包装在来自先前视图控制器的动态变量中时,例如
让 date = "26/11/2016",让 id = "3" 和
let bodyData = "lastlogindate=(date)&CompanyId=(id)" 然后出现错误。
所以基本上我的问题是如何在 swift 3 中将动态变量包装到 request.httpBody 中?
【问题讨论】:
但在 swift 2.2 之前它工作正常 昨天我更新了 xcode,今天它给出了这个错误,swift 3 有什么改变吗? 那你有什么建议? 我在浏览器中测试了它的工作原理 尝试将序列化中的options
设置为.allowFragments
。
【参考方案1】:
我的问题是在将参数传递给bodyData
时出现在这一行:
let bodyData = "lastlogindate=\(todayDate)&CompanyId=\(compID)"
//example lastlogindate = "12/24/2016" and CompanyId = 134
当我执行print(bodyData)
时,我得到的输出为
"lastlogindate=可选(12/24/2016)&CompanyId=可选(134)"
我不知道为什么在 Swift 3 中添加了 optional
。
在 Swift 2.2 中,它没有添加 optional
。
所以,我做的是
let bodyData = "lastlogindate=" + todayDate + "&CompanyId=" + compID
现在,当我执行 print(bodyData)
时,它会给我正确的输出
lastlogindate=12/24/2016&CompanyId=134.
【讨论】:
以上是关于如何在 request.http POST 方法的正文中传递动态参数的主要内容,如果未能解决你的问题,请参考以下文章
400 Bad Request HTTP Response 使用 WCF POST 通过 JQuery