gpt4 book ai didi

c# - CALDAV 编辑/删除 ICLOUD 中的多个事件

转载 作者:行者123 更新时间:2023-11-29 11:33:36 25 4
gpt4 key购买 nike

我已经实现了 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 调用中添加多个事件 enter image description here我希望在一个 API 调用中编辑/删除多个事件。任何帮助,将不胜感激。提前致谢。

最佳答案

不幸的是,这个问题的答案非常简短:WebDAV/CalDAV 中没有批量删除工具。您需要一个一个地删除它们。

(您可以使用一次 DELETE 删除整个日历集合,但这可能不是您想要的。)

更新/澄清:标准 CalDAV/WebDAV 不支持任何批量更改操作。您可以使用多个连接、HTTP/2 多路复用或 HTTP/1.1 流水线同时向服务器发送多个 HTTP 请求。如果服务器很聪明,它可以合并这些变化。至少在 HTTP/2 中,这可以说消除了对 BATCH 操作的需要。

有两种非标准的方式来执行批量更改:

  • a) 包含多个事件的单个 vCalendar 实体到集合 URL 的 POST
  • b) calendarserver-bulk-change draft受 Apple Calendar Server 和 iCloud 支持,也许还有其他支持

“a)”中集合的 POST(有时甚至是 PUT)允许您添加并有时更新(通过使用匹配的 UID)多个事件。许多服务器实际上以一种或另一种方式支持这一点。我建议不要使用它,因为语义非常不清楚/不标准化。例如,如果一个子 PUT 失败会发生什么等。

Bulk-Change draft 描述了用于批量更改的 POST,但(AFAIK)并未广泛实现。它也从未成为 RFC(因为使用 HTTP/2 它有点多余,我不希望发生这种情况)。

关于c# - CALDAV 编辑/删除 ICLOUD 中的多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51208276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com