Ссылка на результат метода в методе - PullRequest
0 голосов
/ 12 января 2020

У меня есть два метода, первый получает токен доступа для доступа к AzureAD, второй должен получать пользовательские данные. Я могу заставить его работать, когда весь код находится в одном и том же методе, но я хотел бы в конечном итоге добавить аргументы командной строки для вызова разных методов, поэтому я пытаюсь разделить элемент авторизации и вызывать его всякий раз, когда другой метод называется. Вот что у меня есть.

using Microsoft.Identity.Client;
using System;
using System.Threading.Tasks;
using System.Configuration;
using System.Net.Http.Headers;
using PublicClientApplication = Microsoft.Identity.Client.PublicClientApplication;

namespace SharpZure
{
    class SharpZure
    {
        static void Main(string[] args)
        {
            Auth().GetAwaiter().GetResult();
            Console.ReadKey();
        }
        static async Task Auth()
        {

            var clientApp = PublicClientApplicationBuilder.Create(ConfigurationManager.AppSettings["clientId"]).Build();
            string[] scopes = new string[] { "user.read" };
            string token = null;
            var app = PublicClientApplicationBuilder.Create(ConfigurationManager.AppSettings["clientId"]).Build();
            var accounts = await app.GetAccountsAsync();
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes)
                                                   .ExecuteAsync();
            token = result.AccessToken;
            GraphServiceClient graphClient = new GraphServiceClient(
                        "https://graph.microsoft.com/v1.0",
                        new DelegateAuthenticationProvider(
                            async (requestMessage) =>
                            {
                                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                            }));
        }

        static async Task UserData()
        {
            Console.WriteLine("Display user details");
            var currentUser = await graphClient.Me.Request().GetAsync();
            Console.WriteLine(currentUser.DisplayName);
        }
    }
}

Конечно, проблема в том, что в методе UserData () graphClient никогда не определяется, как в методе Auth ().

1 Ответ

0 голосов
/ 12 января 2020

Вы можете сделать что-то вроде этого ...

namespace SharpZure
{
    class SharpZure
    {
        static void Main(string[] args)
        {
            var graphClient = await Auth();
            UserData(graphClient);
            Console.ReadKey();
        }
        static async Task<GraphServiceClient> Auth()
        {

            var clientApp = PublicClientApplicationBuilder.Create(ConfigurationManager.AppSettings["clientId"]).Build();
            string[] scopes = new string[] { "user.read" };
            string token = null;
            var app = PublicClientApplicationBuilder.Create(ConfigurationManager.AppSettings["clientId"]).Build();
            var accounts = await app.GetAccountsAsync();
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes)
                                                   .ExecuteAsync();
            token = result.AccessToken;
            GraphServiceClient graphClient = new GraphServiceClient(
                        "https://graph.microsoft.com/v1.0",
                        new DelegateAuthenticationProvider(
                            async (requestMessage) =>
                            {
                                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                            }));
            return graphClient;
        }

        static async Task UserData(GraphServiceClient graphClient)
        {
            Console.WriteLine("Display user details");
            var currentUser = await graphClient.Me.Request().GetAsync();
            Console.WriteLine(currentUser.DisplayName);
        }
    }
}

Просто верните Graph Graph Client из Auth () и передайте его UserData ().

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