【问题标题】:Swift: Mandrill POST Issue斯威夫特:山魈 POST 问题
【发布时间】:2015-08-02 07:42:26
【问题描述】:

我正在尝试通过 Mandrill API 发送电子邮件。 我在下面找到了用于 JSON HTTP POST 方法的快速代码 here

func createRequest(myUrl : String, type : String, params : NSDictionary?, completion : (AnyObject?, NSError?)->Void ){
        var url = NSURL(string: myUrl)
        var request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 60.0)
        if params != nil {
            var data = NSJSONSerialization.dataWithJSONObject(params!, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
            request.setValue("\(data!.length)", forHTTPHeaderField: "Content-Length")
            request.HTTPBody = data
        }
        request.setValue("application/json", forHTTPHeaderField:"Content-type")
        request.setValue("application/json", forHTTPHeaderField: "Accept")
        request.HTTPMethod = type
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(),
            completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) in
                var returnedObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableLeaves, error: nil)
                completion(returnedObject,error)
        })
    }

现在我像这样设置我的网址和参数:

let url = "https://mandrillapp.com/api/1.0/messages/send.json"
let to = ["email" : "xyz@gmail.com"]
let message = [
    "from_email" : "noreply@abc.com",
    "from_name" : "abc",
    "subject" : "Message through abc",
    "text" : "sample message",
    "to" : to
]
let params = [
    "key": "myKey",
    "message" : message
]

然后我这样调用这个函数:

createRequest(url, type: "POST", params: params, completion: {(returnedObject : AnyObject?, error : NSError?)in
    if (returnedObject != nil) {
        println("data = \(returnedObject)")
    }
})

但我得到错误:

data = Optional({
   code = "-2";
   message = "Validation error: {\"message\":{\"to\":[\"Please enter an array\"]}}";
   name = ValidationError;
   status = error;
})

我做错了什么?

【问题讨论】:

  • 查看您的验证错误:"Please enter an array"。您确定要输入数组吗?
  • @QPaysTaxes :我不明白这意味着什么。在 Maildrill 文档中,here“to”是我发送的键/值对
  • 嗯,好吧。翻阅文档,我不明白发生了什么,所以我会假装我很聪明,然后去做其他事情。祝你好运。

标签: ios json swift mandrill


【解决方案1】:

终于!!!自己想出来的。

let to = ["email" : "kashif.izhar@gmail.com"]

应该是

let to = [["email" : "kashif.izhar@gmail.com"]]

希望对某人有所帮助

【讨论】:

  • 该死!这是什么法术? :D 在旁注..我会赞成这个答案..希望其他人觉得这有帮助。您能否解释(在答案中)误解来自哪里?你错了吗? API的文档有错吗? PS:只有在您更新答案后,我才会投票。
【解决方案2】:

我不知道您正在使用的框架(甚至是编程语言),但响应似乎很清楚。

事情是这样的:

让 = ["email" : "xyz@gmail.com"]

在我看来,这显然不像数组,更像是字典(或语言中的等价物)。我认为以下方法可行:

让 = ["xyz@gmail.com"]

编辑

也许,这会:

“到”:[ { "email": "recipient.email@example.com", "name": "收件人姓名", “类型”:“到” } ]

我的下一个猜测是名称和类型不是可选的。而且“to”字段需要一个字典项数组。

【讨论】:

  • 刚试了一下,奇怪的是错误信息还是一样。在 Maildrill 文档中here“to”是键/值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2017-03-24
  • 2018-02-10
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2016-02-08
相关资源
最近更新 更多