Microsoft Graph API Event.PostAsync в C# .NET FrameworkC#

Место общения программистов C#
Ответить
Anonymous
 Microsoft Graph API Event.PostAsync в C# .NET Framework

Сообщение Anonymous »

Я пытаюсь запланировать встречу Outlook в календаре другого пользователя с помощью API Microsoft Graph в моем веб-API ASP.NET, написанном на C# и работающем на .NET 4.8.1. Когда я запускаю показанный здесь код API, он застревает в тупике:
var result = await graphClient.Users[""]
.Events
.PostAsync(requestBody, (requestConfiguration) =>
{
requestConfiguration.Headers.Add("Prefer", "outlook.timezone=\"Eastern Standard Time\"");
});

Выполнение кода консольного приложения приводит к успешному планированию встречи на указанную календарную дату. Я попытался опустить часть кода API async/await, в результате код выполняется, но в конечном итоге выдается исключение NullReferenceException, даже при использовании статических значений, которые действительны и работают при запуске консольного приложения.< /p>
Я также пробовал использовать
Task.Run(async () => await...

но при этом блокируется вся программа. И консольное приложение, и API используют .NET Framework v4.8.1.
Что здесь может быть не так? Буду очень признателен за любую помощь, я уже несколько дней пытаюсь разобраться с этим, используя видео и статьи.
Код API (не работает):
internal async Task ScheduleOutlookAppointment()
{
var scopes = new[] { "https://graph.microsoft.com/.default" };

// Values from app registration
var clientId = "";
var tenantId = "";
var clientSecret = "";

// using Azure.Identity;
var options = new ClientSecretCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
};

var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);

var graphClient = new GraphServiceClient(clientSecretCredential, scopes);

var requestBody = new Event
{
Subject = "Test",
Body = new ItemBody
{
ContentType = BodyType.Html,
Content = "Testing",
},
Start = new DateTimeTimeZone
{
DateTime = "2025-01-16T12:00:00",
TimeZone = "Eastern Standard Time",
},
End = new DateTimeTimeZone
{
DateTime = "2025-01-16T14:00:00",
TimeZone = "Eastern Standard Time",
},
Location = new Location
{
DisplayName = "Test",
},
Attendees = new List{new Attendee{ EmailAddress = new EmailAddress
{
Address = ""
},
Type = AttendeeType.Required,},},
TransactionId = Guid.NewGuid().ToString(),
};

var result = await graphClient.Users[""].Events.PostAsync(requestBody, (requestConfiguration) =>
{
requestConfiguration.Headers.Add("Prefer", "outlook.timezone=\"Eastern Standard Time\"");
});

return;

Код консольного приложения (работает):
static void Main(string[] args)
{
var scopes = new[] { "https://graph.microsoft.com/.default" };

// Values from app registration
var clientId = "";
var tenantId = "";
var clientSecret = "";

// using Azure.Identity;
var options = new ClientSecretCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
};

var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);

var graphClient = new GraphServiceClient(clientSecretCredential, scopes);

var requestBody = new Event
{
Subject = "Test",
Body = new ItemBody
{
ContentType = BodyType.Html,
Content = "Testing",
},
Start = new DateTimeTimeZone
{
DateTime = "2025-01-15T12:00:00",
TimeZone = "Eastern Standard Time",
},
End = new DateTimeTimeZone
{
DateTime = "2025-01-15T14:00:00",
TimeZone = "Eastern Standard Time",
},
Location = new Location
{
DisplayName = "It Worked",
},
Attendees = new List{new Attendee{EmailAddress = new EmailAddress
{
Address = ""
},
Type = AttendeeType.Required,},},
TransactionId = Guid.NewGuid().ToString(),
};

var result = graphClient.Users[""].Events.PostAsync(requestBody, (requestConfiguration) =>
{
requestConfiguration.Headers.Add("Prefer", "outlook.timezone=\"Eastern Standard Time\"");
});

result.Wait();

Console.ReadLine();
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -framework
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»