Я пытаюсь получить данные с помощью API Microsoft Graph и следую этому руководству в статье: Ссылка на учебник
Я не очень хорошо разбираюсь в API, не говоря уже о Microsoft Graph API. Поэтому я считаю это решение полезным, но поскольку я новичок, мне не хватает некоторых шагов, не перечисленных в руководстве.
Шаги, которые я сделал:
Вот шаги, которые я предпринял, и это мои коды:
Это код в файле функции:
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Azure.Identity;
using Microsoft.Graph;
using System.Security.Claims;
using Newtonsoft.Json;
namespace FunctionApp2
{
public class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ClaimsPrincipal claimIdentity)
{
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
var clientSecretCredential = new ClientSecretCredential(
Constants.TenantId, Constants.AppId, Constants.ClientSecret, options);
var graphClient = new GraphServiceClient(clientSecretCredential, Constants.scopes);
var user = await graphClient.Users[claimIdentity.Identity.Name].GetAsync();
var json = Newtonsoft.Json.JsonConvert.SerializeObject(user);
return new OkObjectResult(json);
}
}
}
Если я создаю новые имена файлов классов Constants и передаю сведения о своем приложении Azure:
internal class Constants
{
public static string AppId = "<YOUR APP ID>";
public static string TenantId = "<YOUR TENANT ID>";
public static string ClientSecret = "<YOUR CLIENT SECRET>";
public static string TenantName = "<YOUR TENANT NAME>";
public static string [] scopes = new[] { "https://graph.microsoft.com/.default" };
}
Кроме того, это пакеты, которые я установил:
Однако когда я запускаю проект локально в своей Visual Studio, я получаю следующую ошибку:
Ошибка MSB4062. Не удалось загрузить задачу «GenerateFunctionMetadata» из сборки C:\Users.... (скрыть остальную часть пути). Убедитесь, что объявление верно, что сборка и все ее зависимости доступны и что задача содержит открытый класс, реализующий Microsoft.Build.Framework.ITask. FunctionApp2 C:\Users.... (скрыть остальную часть пути).
Когда я запустил это из приложения-функции Azure, я получил этот экран: экран браузера
Таким образом, синий экран с приложением «Ваши функции 4.0» запущен и работает. Функции Azure — это бессерверные вычисления на основе событий для ускорения разработки».
Может кто-нибудь помочь мне с этим запросом?
Любая помощь будет высоко ценится.
Пробовал воссоздать проект много раз, а также в разных версиях .NET 6 и 8.
Когда я запускаю это из приложения-функции Azure, я получаю этот экран браузера. Таким образом, синий экран с надписью «Ваше приложение Functions 4.0 запущено и работает. Функции Azure — это бессерверные вычисления на основе событий, позволяющие ускорить вашу разработку». сообщение.
Да, там написано, что приложение-функция запущено и работает, это для всего приложения-функции. Если вы хотите запустить развернутую вами функцию, вам необходимо проверить здесь:
Затем нажмите «Функция», затем нажмите «Тест» и запустите, как показано ниже:
Теперь вы получите результат своей функции.
Ошибка MSB4062 Задача «GenerateFunctionMetadata»
Это общая ошибка, которая возникает, когда функция не обновляется и не загружается правильно. Попробуйте использовать последнюю версию csproj и перестроить:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include = "Microsoft.AspNetCore.App" />
<PackageReference Include = "Azure.Identity" Version = "1.12.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker" Version = "1.21.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http" Version = "3.1.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version = "1.2.1" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Sdk" Version = "1.17.0" />
<PackageReference Include = "Microsoft.ApplicationInsights.WorkerService" Version = "2.22.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.ApplicationInsights" Version = "1.2.0" />
<PackageReference Include = "Microsoft.Graph" Version = "5.56.0" />
<PackageReference Include = "Newtonsoft.Json" Version = "13.0.3" />
</ItemGroup>
<ItemGroup>
<None Update = "host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update = "local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Using Include = "System.Threading.ExecutionContext" Alias = "ExecutionContext" />
</ItemGroup>
</Project>