Повторяющееся событие удаления / обновления API календаря Google возвращает 412 в URLSession - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь удалить родительское повторяющееся событие (поэтому родитель и все экземпляры будут удалены).

При использовании URLSession с созданным вручную URLRequest запрос возвращает 412 код ошибки.Я не предоставляю заголовок If-Match, и в событии не было никаких изменений от создания до его удаления.

Выполнение запроса с почтальоном или 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"
   }
}

Странная вещь.Я делаю тот же самый запрос DELETE, используя Postman и PAW, и он успешно возвращается, возвращая код состояния 204. Также мой запрос на удаление, кажется, работает нормально в отдельных событиях или повторяющихся событиях.

Любой, кто имеет опыт работы сзначение?

1 Ответ

0 голосов
/ 18 марта 2019

Так что на самом деле происходило то, что был добавлен заголовок «If-None-Match», который не появлялся, когда я отлаживал объект запроса.Мне пришлось проверить запрос, используя прокси (Charles), чтобы увидеть его.

Переопределение этого поля заголовка, похоже, решило эту проблему.

...