2016-05-03 21 views
0

我張貼NSURLMutableRequest同時使用Alamofire和類似的自定義方法的WebAPI:差異的NSURLRequest

Alamofire

Alamofire.request(.POST, "http://www.webapi.com?path=Login", parameters: ["username": "myname", "password": "mypass"]).responseJSON { response in 
// do something with returned data ... 
} 

定製

let request = NSMutableURLRequest(URL: NSURL(string:"http://www.webapi.com?path=Login")!) 

let bodyData = "username=myname&password=mypass" 
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding) 
request.HTTPMethod = "POST" 
request.setValue("application/json", forHTTPHeaderField: "Content-Type") 

let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 

    session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

    // do something with returned data... 

    }.resume() 

我通過Alamofire方法得到了正確的結果,但不是我自己的 方法。

與Alamofire post方法相比,我做了什麼錯誤?

+3

可以打開Alamofire.request方法。 alamofire的代碼是開源的。 – Sahil

+0

當你說你得到了正確的結果; NSURLRequest的錯誤結果是什麼?這是一個崩潰,從任務返回的錯誤,錯誤的數據? – keithbhunter

+0

@keithbhunter正確的結果是json格式化的數據和不正確的結果只是'無' – bluenowhere

回答

1

您正在以這種格式在["username": "myname", "password": "mypass"]格式中以及在此格式的自定義請求"username=myname&password=mypass"中傳遞alamofire中的參數。所以兩者都有差異。

第一個是json格式,第二個是字符串格式。

因此,從您的自定義請求以json格式發送數據。把你的參數的dictionary,它通過轉換成數據,NSJSONSerialization.dataWithJSONObject

希望這將有助於:)

+0

我嘗試過 ''let let jsonData = try NSJSONSerialization.dataWithJSONObject([「username」:「myname」,「password」:「mypass」 ],選項:.PrettyPrinted); request.setValue(「application/json」,forHTTPHeaderField:「Content-Type」); request.HTTPBody = jsonData;''' 仍然有結果爲零。 – bluenowhere

+0

選項應該爲0而不是美印 – Lion