2016-05-03 23 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