Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除不工作的事件_C#_Icalendar_Vcalendar_Vcal - Fatal编程技术网

C# 删除不工作的事件

C# 删除不工作的事件,c#,icalendar,vcalendar,vcal,C#,Icalendar,Vcalendar,Vcal,我正在我的web应用程序中动态创建ical事件,当有人取消应用程序上的约会时,我们会在其电子邮件中生成一个delete ical event*.ics文件,以删除其日历中的事件 创建是完美的,但当我们试图删除我们创建的约会时,它不会将其从日历中删除 创建Ical事件代码: string[] contents = { "BEGIN:VCALENDAR", "VERSION:2.0", "PRODID:-//dev.com//iCal//EN",

我正在我的web应用程序中动态创建ical事件,当有人取消应用程序上的约会时,我们会在其电子邮件中生成一个delete ical event*.ics文件,以删除其日历中的事件

创建是完美的,但当我们试图删除我们创建的约会时,它不会将其从日历中删除

创建Ical事件代码:

 string[] contents = { 
      "BEGIN:VCALENDAR",
      "VERSION:2.0",
      "PRODID:-//dev.com//iCal//EN",
      "X-WR-CALNAME:development",
      "X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
      "X-FUNAMBOL-ALLDAY:0",
      "METHOD:REQUEST",
      "BEGIN:VEVENT",
      "UID:" + Args.EventUID, 
      "SEQUENCE:1",
      "DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "LOCATION: " + Args.EventLocation, 
      "ORGANIZER: test@outlook.com",
      "DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
      "SUMMARY:" + Args.EventDescription, 
      "STATUS:CONFIRMED",
      "TRANSP:OPAQUE",
      "PRIORITY:" + Args.EventPriority.ToString(), 
      "END:VEVENT", 
      "END:VCALENDAR" 
 }; 
在iphone/android/outlook上创建活动非常有效

删除事件部分:

    string[] contents = { 
      "BEGIN:VCALENDAR",
      "VERSION:2.0",
      "METHOD:CANCEL",
      "X-WR-CALNAME:development",
      "X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
      "PRODID:-//dev.com//iCal//EN",
      "X-FUNAMBOL-ALLDAY:0",
      "BEGIN:VEVENT",                                
      "UID:" + Args.EventUID,
      "SEQUENCE:2",
      "DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "LOCATION: " + Args.EventLocation, 
      "DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
      "SUMMARY:" + Args.EventDescription, 
      "ORGANIZER: test@outlook.com",
      "PRIORITY:" + Args.EventPriority.ToString(), 
      "STATUS:CANCELLED",
      "TRANSP:OPAQUE",
      "END:VEVENT", 
      "END:VCALENDAR" 
  };
当我单击此生成文件以删除已创建的事件时,它不会删除该事件,有时它会复制该事件


创建和删除时的ical UID相同

首先,仔细检查UID。我知道你说他们是一样的,但是检查一下!空白?案子

接下来,将PRODID放在第二行,就在BEGIN之后(当验证器告诉您将版本放在第二行时,请忽略验证器)。这听起来很琐碎,甚至没有使用该字段,但Outlook特别挑剔。复制一个工作示例。测试并告诉我是否我错了

接下来,序列从0开始索引。客户端可能会将SEQUENCE:1解释为一个更新,并想知道原始邀请在哪里

接下来,检查电子邮件的结构和mime类型标题。我通过发送一封内容类型为text/calendar的简单电子邮件获得了最佳效果;MIME头中的方法=“[REQUEST/CANCEL]”

还是不工作?尝试添加ATTENDEE元素,需要参与,rsvp true等,重复收件人的电子邮件地址

还有问题吗?使用在线Icalendar验证器检查您的输出,但也复制一个工作示例。从gmail和/或outlook向自己发送邀请,然后取消。一切都很重要—消息的结构、Icalendar中字段的顺序、电子邮件的MIME头。通过GMail show original选项,发送到GMail可以让您准确地看到收到的内容


我注意到你什么也没做。Ical行限制为75个字符,不多,溢出行必须以空格开头。验证程序会很快告诉您。

区别可能还在于日历应用程序是否已“订阅”或“导入”ics文件?订阅的事件应该更新,导入的事件通常可能不是用户可以更改的-可能在日历应用程序之间有所不同。

尝试使用
PUBLISH
as
METHOD
0
as
SEQUENCE
提交和
1
as
SEQUENCE
擦除

提交示例:

string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:0",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CONFIRMED",
"END:VEVENT",
"END:VCALENDAR"
};
擦除示例:

string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:CANCEL",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:1",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CANCELLED",
"END:VEVENT",
"END:VCALENDAR"
};

你知道这有一个框架吗?我们从未遇到过任何此类问题: