Я хочу создать событие календаря с помощью Microsoft Graph, и это работает, но, к сожалению, я не могу добавить вложения к событию. Событие создано, но без вложений. Об ошибках не сообщается.
Это мой код:
DateTimeTimeZone start = new DateTimeTimeZone
{
TimeZone = TimeZoneInfo.Local.Id,
DateTime = dateTimePicker1.Value.ToString("o"),
};
DateTimeTimeZone end = new DateTimeTimeZone
{
TimeZone = TimeZoneInfo.Local.Id,
DateTime = dateTimePicker2.Value.ToString("o"),
};
Location location = new Location
{
DisplayName = "Thuis",
};
byte[] contentBytes = System.IO.File
.ReadAllBytes(@"C:\test\sample.pdf");
var ev = new Event();
FileAttachment fa = new FileAttachment
{
ODataType = "#microsoft.graph.fileAttachment",
ContentBytes = contentBytes,
ContentType = "application/pdf",
Name = "sample.pdf",
IsInline = false,
Size = contentBytes.Length
};
ev.Attachments = new EventAttachmentsCollectionPage();
ev.Attachments.Add(fa);
ev.Start = start;
ev.End = end;
ev.IsAllDay = false;
ev.Location = location;
ev.Subject = textBox2.Text;
var response = await graphServiceClient
.Users["[email protected]"]
.Calendar
.Events
.Request()
.AddAsync(ev);
Похоже, что все еще не поддерживается создание события вместе с вложениями в одном запросе (аналогичная проблема)
В качестве обходного пути, сначала можно создать событие без вложений, а затем добавить в него вложения (требуется два запроса к серверу), например:
var ev = new Event
{
Start = start,
End = end,
IsAllDay = false,
Location = location,
Subject = subject
};
//1.create an event first
var evResp = await graphServiceClient.Users[userId].Calendar.Events.Request().AddAsync(ev);
byte[] contentBytes = System.IO.File.ReadAllBytes(localPath);
var attachmentName = System.IO.Path.GetFileName(localPath);
var fa = new FileAttachment
{
ODataType = "#microsoft.graph.fileAttachment",
ContentBytes = contentBytes,
ContentType = MimeMapping.GetMimeMapping(attachmentName),
Name = attachmentName,
IsInline = false
};
//2. add attachments to event
var faResp = await graphServiceClient.Users[userId].Calendar.Events[evResp.Id].Attachments.Request().AddAsync(fa);