Код ошибки 406 при использовании dot Net MS Graph SDK для получения информации о себе пользователя? - PullRequest
1 голос
/ 11 июля 2020

Вот мой код, в основном весь он скопирован из образца кода документа Microsoft:

private async static void exec()
{
    try
    {
        var clientId = "soemid here";
        var tenantID = "some id here";

        string[] scopes = new string[] { "User.Read"};
        
        var email = "xxxx@xx.com";
        System.Security.SecureString password = new System.Security.SecureString();
        password.AppendChar('x');
        ... 
        // append whole password here
        password.AppendChar('x');

        IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
         .Create(clientId)
         .WithTenantId(tenantID)
         .Build();

        UsernamePasswordProvider authProvider = new UsernamePasswordProvider(publicClientApplication, scopes);

        GraphServiceClient graphClient = new GraphServiceClient(authProvider);
           
        User me = await graphClient.Me.Request()
                        .WithUsernamePassword(email, password)
                        .GetAsync();

        Console.WriteLine(me.Id);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }

    Console.ReadKey();
}

В этой проблеме ничего не печатается, вместо этого я получаю код ошибки 406. Как я могу это исправить? Кстати в документации Microsoft 406 означает Эта служба не поддерживает формат, запрошенный в заголовке Accept.

1 Ответ

0 голосов
/ 13 июля 2020

Для решения этой проблемы я тестирую его на своей стороне с той же версией Microsoft.Graph (Microsoft.Graph.Beta -Version 0.19.0-preview) с вами. Но он отлично работает на моей стороне, поэтому я предоставляю свой код ниже для вашей справки.

using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
using System;
using System.Security;
using System.Threading.Tasks;

namespace ConsoleApp22
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var clientId = "xxx";
            var tenantID = "xxx";

            string[] scopes = new string[] { "User.Read" };
            var email = "xxx";
            
            var str = "xxx";
            var password = new SecureString();
            foreach (char c in str) password.AppendChar(c);

            IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
                 .Create(clientId)
                 .WithTenantId(tenantID)
                 .Build();

            UsernamePasswordProvider authProvider = new UsernamePasswordProvider(publicClientApplication, scopes);

            GraphServiceClient graphClient = new GraphServiceClient(authProvider);

            User me = await graphClient.Me.Request()
                                .WithUsernamePassword(email, password)
                                .GetAsync();

            Console.WriteLine(me.Id + "===" + me.DisplayName);
        }
    }
}

enter image description here

For your issue, could you please create a new project and install the same packages with me in the screenshot above, and then try it again.

By the way, I ran the code with .net core 3.1

=======================Update======================

If you can't make your main method async, you can write the code as below:

enter image description here

Or if your execution code is in another class, you can write the code as:

введите описание изображения здесь

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