首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Alamofire中将body类型设置为JSON?

如何在Alamofire中将body类型设置为JSON?
EN

Stack Overflow用户
提问于 2016-06-07 09:55:10
回答 1查看 2.1K关注 0票数 1

我在网上与来自不同项目的不同人员一起工作,他们负责后端API who服务。通常,我在发送和接收JSON方面没有问题,但这一次,我似乎无法正确地将JSON发送到服务器。

通常,我使用Alamofire接收和发送JSON消息,通常的调用如下所示:

代码语言:javascript
运行
复制
let param = populateParamWithDictionary();
let url = "https://www.example.com";

Alamofire.request(.POST, url, parameters: param, headers: nil)
.responseJSON { response in {
  // take care of response here
}

但这一次,我得到了后端程序员要求我使用OAuth v2的项目。因此,假设我已经开发了一个函数,它已经负责获取access_token字符串。这个函数现在变成这样:

代码语言:javascript
运行
复制
let param = populateParamWithDictionary();
let url = "https://www.example.com";
let headers : Dictionary<String, String> = [
        "Content-Type":"application/json",
        "Authorization":"Bearer \(access_token)"
    ];

Alamofire.request(.POST, url, parameters: param, headers: headers)
.responseJSON { response in {
  // take care of response here
}

但结果并非如此,我得到了400个错误的请求。我甚至试过这样做:

代码语言:javascript
运行
复制
let param = populateParamWithDictionary();
let url = "https://www.example.com";
let headers : Dictionary<String, String> = [
        "Content-Type":"application/json",
        "Authorization":"Bearer \(access_token)"
    ];

Alamofire.request(.POST, url, parameters: param, encoding: ParameterEncoding.JSON, headers: headers)
.responseJSON { response in {
  // take care of response here
}

但结果更糟。这就是我打印回复时得到的。

失败:错误Domain=NSURLErrorDomain代码=-1017“无法解析响应”UserInfo={NSUnderlyingError=0x7fbb505788f0 { Domain=kCFErrorDomainCFNetwork代码=-1017 "(null)“UserInfo={kCFStreamErrorCodeKey=-1,_kCFStreamErrorDomainKey=4},NSErrorFailingURLStringKey=http://lfapp.learnflux.net/v1/me,NSErrorFailingURLKey=http://lfapp.learnflux.net/v1/me,_kCFStreamErrorDomainKey=4,_kCFStreamErrorCodeKey=-1,NSLocalizedDescription=cannot解析响应}

但是,如果我使用REST客户端,通过将头设置为具有身份验证和内容类型,并将参数写入为普通内容(例如在正文内容中的平原API中),则请求可以工作。

我怎么才能解决这个问题?

编辑:带有访问令牌的部分已经清除。访问令牌可以工作。如果API不需要任何参数,我可以成功地调用API (可能是因为在服务器上,代码根本不需要检查或验证主体,因为它不需要任何参数,因此不会引发错误)。问题是当我提出一个需要任何参数的请求时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 02:56:50

您所犯的错误可能是由于请求中的encoding: ParameterEncoding.JSON。尝试将其更改为encoding: .URLEncodedInURL。如果这对您没有帮助,请将参数添加到问题中,如果您请求获得令牌,请执行以下操作:

代码语言:javascript
运行
复制
if let access_token = json["access_token"]!{
     // Make the request here when you know that you have your token
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37676079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档