Google Calendar API删除/更新重复事件在URLSession

时间:2019-03-18 11:02:11

标签: ios swift calendar google-calendar-api

我正在尝试删除父重复事件(因此父和所有实例都将被删除)。

URLSession与手动构建的URLRequest一起使用时,请求将返回 412 错误代码。我没有提供If-Match标头,并且从创建到删除事件都没有任何变化。

使用Postman或Paw执行请求,请求成功,状态码为 204 ,这是期望的结果。

我这样构造请求:

 func delete(eventWithId eventId: String, token: String) {

    let sessionConfig = URLSessionConfiguration.default

    let session = URLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)

    guard var URL = URL(string: "https://www.googleapis.com/calendar/v3/calendars/primary/events/\(eventId)") else {return}
    var request = URLRequest(url: URL)
    request.httpMethod = "DELETE"

    request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) -> Void in
        if (error == nil) {
            let statusCode = (response as! HTTPURLResponse).statusCode // <--- returning status code 412
        }
        else {
            print("URL Session Task Failed: %@", error!.localizedDescription);
        }
    })
    task.resume()
    session.finishTasksAndInvalidate()
}

响应正文为:

{
   "error":{
      "errors":[
         {
            "domain":"global",
            "reason":"conditionNotMet",
            "message":"Precondition Failed",
            "locationType":"header",
            "location":"If-Match"
         }
      ],
      "code":412,
      "message":"Precondition Failed"
   }
}

奇怪的事情。我使用Postman和PAW进行了相同的DELETE请求,并成功,返回状态代码204。此外,在单个事件或重复出现的单个事件中,我的删除请求似乎运行良好。

有人对此事有经验吗?

1 个答案:

答案 0 :(得分:0)

所以实际上发生了什么,就是添加了一个“ If-None-Match”标头,该标头在调试请求对象时不会显示。我必须使用(查尔斯)代理审核该请求才能看到它。

覆盖此标头字段似乎已解决了此问题。