Как получить пользовательские данные из инструментов API Office 365

Я использую инструменты API Office 365, я хочу получить профиль пользователя, вошедшего в систему, адрес электронной почты, имя,...

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

Как это сделать?

Я пробовал это:

 public static async Task<string> GetEmail()
    {
        var client = await EnsureClientCreated();

        var x = await client.Me.ExecuteAsync();


        return x.DisplayName;
    }


    public static async Task<ExchangeClient> EnsureClientCreated()
    {
        if (_discoveryContext == null)
        {
            _discoveryContext = await DiscoveryContext.CreateAsync();
        }

        var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

        _lastLoggedInUser = dcr.UserId;

        return new ExchangeClient(ServiceEndpointUri, async () =>
        {
            return (await _discoveryContext.AuthenticationContext.AcquireTokenSilentAsync(ServiceResourceId, _discoveryContext.AppIdentity.ClientId, new Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier(dcr.UserId, Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifierType.UniqueId))).AccessToken;
        });
    }

но это получает только отображаемое имя, мне тоже нужен адрес электронной почты. Заранее спасибо.


person Mostafa El-Abady    schedule 20.08.2014    source источник


Ответы (2)


Intellisense — ваш друг с библиотеками классов внутри проектов Visual STudio, которые создаются в этом образце файла при добавлении подключенной службы.

string email = x.Mail;

принесет вам то, что вы хотите.

person Jeremy Thake MSFT    schedule 21.08.2014
comment
Нет свойства Mail! - person Mostafa El-Abady; 21.08.2014

Джереми прав, вам понадобится свойство Mail. Я не уверен, но не помню, чтобы адрес электронной почты отображался в ExchangeClient. Вернитесь к окнам Connected Services и добавьте Users and Group API. Это даст вам то, что вам нужно, чтобы получить адрес электронной почты пользователя.

Microsoft.Office365.ActiveDirectory.AadGraphClient aadClient = await ActiveDirectoryApiSample.EnsureClientCreated();
var currentUser = await(aadClient.Users
                .Where(i => i.ObjectId == "Logged in user's ID from ActiveDirectoryApiSample")
                .ExecuteSingleAsync());

string usermail = currentUser.Mail;
person Michael Mainer    schedule 04.09.2014