Опубликовать события в Microsoft Graph c # - PullRequest
0 голосов
/ 04 июля 2018

извините за несколько сообщений, я не могу получить запрос на публикацию в Microsoft Graph, я следую за документацией , я пытаюсь создать событие в

https://graph.microsoft.com/beta/myDomain/users/myEmail/calendar/events

У меня есть функция и несколько вспомогательных классов для создания объекта json, например:

List<ToOutlookCalendar> toOutlook = new List<ToOutlookCalendar>();    
toOutlook.Add(new ToOutlookCalendar
        {
            Start = new End
            {
                DateTime = DateTimeOffset.UtcNow,
                TimeZone = "Pacific Standard Time"
            },
            End = new End
            {
                DateTime = DateTimeOffset.UtcNow,
                TimeZone = "Pacific Standard Time"
            },
            Body = new Body
            {
                ContentType = "HTML",
                Content = "testar for att se skit"
            },
            Subject = "testin",
            Attendees = new List<Attendee>
            {
                new Attendee
                {
                    EmailAddress = new EmailAddress
                    {
                        Address = "myEmail",
                        Name = "name"
                    },
                    Type = "Required"

                }

            },
            Token = tokenn

        });

        return new JsonResult
        {
            Data = toOutlook

        };

ранее я писал на: https://outlook.office.com/api/v2.0/myDomain/users/myEmail/calendar/events

, который дал мне ошибку 401, жалуясь на то, что токен относится к неделе. Я создал сертификат x509, но мне не повезло найти способ загрузить его в свой каталог в Azure, и, поскольку я хочу сделать все программно и до сих пор добился успеха, решил использовать другой подход и снова наткнулся на документацию Microsoft Graph.

Я получаю события календаря после авторизации разрешений приложения для Calendars.ReadWrite: https://graph.microsoft.com/beta/myDomain/users/myEmail/calendar/events.

Во всяком случае, мой запрос выглядит следующим образом и дает мне 400 плохих запросов:

htttpclient.DefaultRequestHeaders.Add("Authorization", "Bearer " + tokenn);
htttpclient.DefaultRequestHeaders.Add("Host", "graph.microsoft.com");
htttpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var stringPayload = await Task.Run(() => JsonConvert.SerializeObject(res));

var response = await htttpclient.PostAsync($"https://graph.microsoft.com/beta/{myDomain}/users/{myEmail}/calendar/events",
new StringContent(stringPayload, Encoding.UTF8, "application/json"));

Кто-нибудь знает, почему? Я следую за документацией к письму, которому я верю, но все еще получаю 400 плохих запросов.

Редактировать 1

Я использую эти классы для создания события на основе документации

 public class ToOutlookCalendar
    {
        [JsonProperty("Subject")]
        public string Subject { get; set; }

        [JsonProperty("Body")]
        public Body Body { get; set; }

        [JsonProperty("Start")]
        public End Start { get; set; }

        [JsonProperty("End")]
        public End End { get; set; }

        [JsonProperty("Attendees")]
        public List<Attendee> Attendees { get; set; }
    }

    public class Attendee
    {
        [JsonProperty("EmailAddress")]
        public EmailAddress EmailAddress { get; set; }

        [JsonProperty("Type")]
        public string Type { get; set; }
    }

    public class EmailAddress
    {
        [JsonProperty("Address")]
        public string Address { get; set; }

        [JsonProperty("Name")]
        public string Name { get; set; }
    }

    public class Body
    {
        [JsonProperty("ContentType")]
        public string ContentType { get; set; }

        [JsonProperty("Content")]
        public string Content { get; set; }
    }

    public class End
    {
        [JsonProperty("DateTime")]
        public DateTimeOffset DateTime { get; set; }

        [JsonProperty("TimeZone")]
        public string TimeZone { get; set; }
    }

Любая помощь приветствуется !!

1 Ответ

0 голосов
/ 04 июля 2018

Чтобы сделать это немного короче / суммировать, это то, что я использую для создания события и необходимо.

using (HttpClient c = new HttpClient())
{
     String requestURI = "https://graph.microsoft.com/v1.0/users/"+userEmail+"/calendar/events.";

     //with your properties from above except for "Token"
     ToOutlookCalendar toOutlookCalendar = new ToOutlookCalendar();

     HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(toOutlookCalendar), Encoding.UTF8, "application/json");

     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestURI);
     request.Content = httpContent;
     //Authentication token
     request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);

     var response = await c.SendAsync(request);
     var responseString = await response.Content.ReadAsStringAsync();
}

Вам не нужны эти заголовки:

htttpclient.DefaultRequestHeaders.Add("Host", "graph.microsoft.com");
htttpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

И токен не является частью объекта Event, поэтому вы должны удалить его из ToOutlookCalendar.

Если вы не хотите писать все эти JSONObjects самостоятельно, вы можете использовать Graph SDK для c # (также устраняется риск того, что вы забудете свойство / добавите неправильное). У них уже есть объект для назначений под названием Event.

Редактировать

Вам также не нужна часть "myDomain" в URL вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...