当前位置: 首页 > 知识库问答 >
问题:

如何在Alamofire中将body type设置为JSON?

高山
2023-03-14

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

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

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
}

但这一次,我得到了后端程序员要求我使用OAuthV2的项目。假设我已经开发了一个函数,它已经负责获取访问令牌字符串。该函数现在变成如下所示:

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个错误请求错误。我甚至还试着这样做:

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
}

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

失败:错误域=NSURLErrorDomain Code=-1017"无法解析响应"UserInfo={NSUnderlyingError=0x7fbb505788f0{错误域=kCFErrorDomainCFNetwork Code=-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,无法解析响应

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

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

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

共有1个答案

梁渊
2023-03-14

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

if let access_token = json["access_token"]!{
     // Make the request here when you know that you have your token
}
 类似资料:
  • 问题内容: 在第一种情况下 ,它会抛出 NSURLErrorDomain (正确设置了超时): 在第二种情况下 ,超时不会被替换,而是仍设置为60秒。 我在ios 10.1中运行 我的代码:( 不起作用) 解决了Alamofire github线程: Alamofire 4.3.0设置超时引发NSURLErrorDomain错误#1931 问题答案: 基于@ kamal-thakur响应。 迅捷3

  • 问题内容: 我正在使用Jenkins Multibranch Pipelines实施构建工作。最后阶段是将构建输出上传到Artifactory。 通过界面配置独立作业时,有一个选项“从Artifactory丢弃旧版本”,这使我只能保留与“要保留的最大版本数”设置中指定的相同数量的版本。 我的Jenkins文件中的上传阶段配置如下:https ://wiki.jenkins- ci.org/disp

  • 本文向大家介绍如何在JavaFX中将动作设置为RadioButton?,包括了如何在JavaFX中将动作设置为RadioButton?的使用技巧和注意事项,需要的朋友参考一下 单选按钮是一种圆形的按钮。它有两种状态,选择和取消选择。通常,单选按钮使用切换组进行分组,您只能在其中选择一个。 您可以通过实例化javafx.scene.control.RadioButton类(它是ToggleButto

  • 问题内容: 谁能建议我如何将.TIF格式的图像存储到该图像并将其添加到列表模型?我试过了,但是给了我。 在这里,我编辑了代码,这是我的错误msg 异常,位于ListImage1.main(ListImage1.java:48)的javax.swing.ImageIcon。(ImageIcon.java:228)的线程“ main”中java.lang.NullPointerException 问题

  • 问题内容: 我试图通过对数据库中的文档进行计数,并使用该数字来创建_id(假设第一个_id为0)来为我的Mongoose模型动态创建_id。但是,我无法从值中设置_id。这是我的代码: 我尝试了多种设置_id的方法,但是它对我不起作用。这是最新的错误: 如果您知道发生了什么事,请告诉我。 问题答案: 您要么需要将该属性声明为架构的一部分(将其注释掉),要么使用该选项并将其设置为(您正在使用该选项,

  • 代码只是简单地将我的变量名设置为字符串“null”,所以我不知道如何让程序等待输入。编译器不允许我在不初始化变量的情况下声明它。