#ios #swift #calendar #google-calendar-api
#iOS #swift #Календарь #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, и он выполняется успешно, возвращая код состояния 204. Также мой запрос на удаление, похоже, работает нормально в отдельных событиях или в отдельных случаях повторяющегося события.
У кого-нибудь есть опыт в этом вопросе?
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос и включите свой код, который нам нужен, чтобы иметь возможность видеть, что вы делаете.
2. Очень верное замечание @DaImTo . Я отредактировал
Ответ №1:
Итак, что на самом деле происходило, так это то, что был добавлен заголовок «If-None-Match», который не отображался при отладке объекта запроса. Мне пришлось провести аудит запроса с помощью прокси (Charles), чтобы увидеть его.
Переопределение этого поля заголовка, похоже, решило эту проблему.