Я интегрирую Календарь Outlook с пользовательским календарем с потоком учетных данных клиента , и я пытаюсь создать свой собственный API и не использовать MAPI слишком много.
Я хотел бы сделать сообщение на https://outlook.office.com/api/v2.0/TenantDomain/users/useremail@domain/events
Я следую этому руководству Создать события и создал вспомогательные классы:
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; }
}
мой объект 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 = "some email",
Name = "name"
}
},
new Attendee
{
EmailAddress = new EmailAddress
{
Address = "some email",
Name = "name"
}
}
}
});
return new JsonResult
{
Data = toOutlook,
ContentType = "application/json",
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
я хочу сделать метод PostAsync следующим образом:
var res = await ToOutlookKalendrar();
var stringPayload = await Task.Run(() => JsonConvert.SerializeObject(res));
var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
var responsse = await client.PostAsync($"https://outlook.office.com/api/v2.0/{tenantDomain}/users/{userEmail}/events", stringPayload );
Однако это дает мне 401 несанкционированный доступ, я что-то пропустил? мне нужно включить accessToken в Httpclient?
Обновление
Я добавил токен в заголовки запроса, но все еще получаю 401 неавторизованным:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + tokenn);
Обновление 2
Теперь я получаю эту ошибку после включения accessToken в шапку:
reason = "Токен доступа получен с использованием метода проверки подлинности, который слишком слаб, чтобы разрешить доступ для этого приложения. Представленная сила аутентификации была 1, требуется 2."; Error_category = "invalid_token"
Теперь я потерян, должен ли accesstoken находиться в заголовке или в теле объекта json?
Обновление 3
В настоящее время мне нужно обновить, как я получу accessToken, я отправлю ответ, если мне удастся сделать это правильно на этот раз
Любая помощь приветствуется !!