首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在方法中引用方法的结果

在方法中引用方法的结果
EN

Stack Overflow用户
提问于 2020-01-12 05:17:50
回答 1查看 156关注 0票数 0

我有两种方法,第一种是获取访问令牌来访问AzureAD,第二种是获取用户数据。当代码都在同一个方法中时,我可以让它工作,但我希望最终添加命令行参数来调用不同的方法,所以我尝试将授权部分分开,并在调用另一个方法时调用它。这是我到目前为止所掌握的。

代码语言:javascript
复制
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()方法中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-12 07:56:20

你可以这样做..。

代码语言:javascript
复制
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);
        }
    }
}

只需从Auth()返回图形客户端并将其传递给UserData()即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59698713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档