我已经实现了caldav api在icloud日历中添加,更新,删除事件,并且一切都按预期工作。当涉及到在一个api调用中添加,更新,删除多个事件时,添加工作不会出现很多问题。但是不确定如何在一个api调用中编辑和删除多个事件。
下面的代码将使我了解如何删除一个事件
public void DeleteEvent(CalendarToken authToken, string eventId, Action<APIResponse> callback)
{
var appleToken = GetAppleAuthToken(authToken);
string url = @"https://" + appleToken.AppleCalendarDomainUrl + "/" + appleToken.AppleUserID + "/calendars/home/" + eventId + "_event.ics";
string response = SendRequest(appleToken, url, string.Empty, "DELETE", "application/xml; charset=utf-8", "0");
}
private string SendRequest(AppleCalendarToken appleToken, string destinationUrl, string requestData, string methodType, string contentType, string depthValue)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestData);
request.Credentials = GetCredentials(appleToken, destinationUrl);
request.PreAuthenticate = true;
request.ContentType = contentType; //"application/xml; encoding='utf-8'";
request.ContentLength = bytes.Length;
request.Method = methodType;
request.Headers.Add("Depth", depthValue);
request.Accept = "*/*";
request.UserAgent = "cURL based CalDAV client";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
if ((int)response.StatusCode == 207 || (int)response.StatusCode == 201)
{
Stream responseStream = response.GetResponseStream();
return new StreamReader(responseStream).ReadToEnd();
}
}
catch
{
throw;
}
return string.Empty;
}
下面的屏幕快照将显示如何在一个api调用中添加多个事件 我正在寻找在一个api调用中编辑/删除多个事件。 任何帮助,将不胜感激。预先感谢。
答案 0 :(得分:1)
不幸的是,该问题的答案很短:WebDAV / CalDAV中没有批量删除功能。您需要一个一个地删除它们。
(您可以使用单个DELETE删除整个日历集合,但这可能不是您想要的。)
更新/说明:标准CalDAV / WebDAV不支持任何批量更改操作。您可以使用多个连接,HTTP / 2复用或HTTP / 1.1流水线同时向服务器发送多个HTTP请求。如果服务器很聪明,它可以合并这些更改。至少可以使用HTTP / 2,这可以说消除了对BATCH
操作的需要。
执行批量更改有两种非标准方式:
calendarserver-bulk-change
draft 对“ a)”中的集合的POST(有时甚至是PUT)允许您添加(有时通过使用匹配的UID)多个事件。实际上,许多服务器都以一种或另一种方式支持此功能。我建议不要使用它,因为语义非常不清楚/不规范。例如,如果一个子PUT失败等会发生什么情况。
Bulk-Change草稿描述了用于批量更改的POST,但是(AFAIK)并未广泛实施。它也从未成为RFC(并且由于带有HTTP / 2,所以有点多余,我不希望这样)。