如何在 C# 中认证跑道

How to Authenticate Podio in C#

这是我第一次尝试进行身份验证,我不太明白。我在 Visual Basic 中工作,我已经安装了 Nuget Podio.Async.

在下面的代码中不会使用应用程序或密码进行身份验证。

当我删除 'async' 和 'await' 时,它似乎进行了身份验证,但随后我丢失了 'item.Fields'。

        static void Main()
        {
            Init();
        }

        public static async void Init()
        {
            var podio = new Podio(clientId, clientSecret);
            Console.WriteLine("Client ID and Secret");

            //await podio.AuthenticateWithApp(appId, appToken);
            await podio.AuthenticateWithPassword(username, password);
            Console.WriteLine("Authenticated");

            var item = await podio.ItemService.GetItem(1124848809);
            Console.WriteLine(item.Fields.Count);
        }

方法Init是一个async方法。您在同步方法 (`main') 中调用它。这是调用异步方法的错误方法!

请尝试以下解决方法,它应该可以解决您的问题:

    static void Main()
    {
        Init().Wait();
    }

    public static async Task Init()
    {
        var podio = new Podio(clientId, clientSecret);
        Console.WriteLine("Client ID and Secret");

        //await podio.AuthenticateWithApp(appId, appToken);
        await podio.AuthenticateWithPassword(username, password);
        Console.WriteLine("Authenticated");

        var item = await podio.ItemService.GetItem(1124848809);
        Console.WriteLine(item.Fields.Count);
    }

更新 1:

因为main方法是同步方法,所以我调用了Wait()方法,让Init方法在main方法内部同步调用。为了使事情正常工作 never 定义一个具有 void return 值的异步方法,我还将 Init 的 return 值更改为 Task.

事实证明,从 7.1 版开始,您现在可以使用异步 Main 方法。此代码对我有用:

        static async Task<int> Main()
        {
            var podio = new Podio(clientId, clientSecret);
            await podio.AuthenticateWithPassword(username, password);

            var item = await podio.ItemService.GetItem(1124848809);
            Console.WriteLine(item.Fields.Count);

            return 0;
        }