如何从onedriveclient sdk获取用户名或电子邮件c#

jon*_*box 2 c# onedrive uwp windows-10-universal

如何获取用户名或电子邮件IOneDriveClient

验证:

string[] scopes = { "onedrive.readwrite" };
IOneDriveClient OneDriveClient = OneDriveClientExtensions.GetUniversalClient(scopes);
await OneDriveClient.AuthenticateAsync();
Run Code Online (Sandbox Code Playgroud)

Jay*_*Zuo 6

我们无法IOneDriveClient直接获取用户名或电子邮件.但是形式IOneDriveClient我们可以得到AccessToken.当我们拥有时AccessToken,我们可以将它与Live Connect Representational State Transfer(REST)API一起使用来检索用户的名字.

用于请求有关已登录用户的信息的REST API是:

GET https://apis.live.net/v5.0/me?access_token=ACCESS_TOKEN
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅使用REST请求信息.

所以在应用程序中,我们可以使用以下代码来获取用户的显示名称:

string[] scopes = new string[] { "onedrive.readwrite" };
var client = OneDriveClientExtensions.GetUniversalClient(scopes) as OneDriveClient;
await client.AuthenticateAsync();
//get the access_token
var AccessToken = client.AuthenticationProvider.CurrentAccountSession.AccessToken;
//REST API to request info about the signed-in user
var uri = new Uri($"https://apis.live.net/v5.0/me?access_token={AccessToken}");

var httpClient = new System.Net.Http.HttpClient();
var result = await httpClient.GetAsync(uri);
//user info returnd as JSON
string jsonUserInfo = await result.Content.ReadAsStringAsync();
if (jsonUserInfo != null)
{
    var json = Newtonsoft.Json.Linq.JObject.Parse(jsonUserInfo);
    string username = json["name"].ToString();
}
Run Code Online (Sandbox Code Playgroud)

要获取用户的电子邮件,我们需要添加wl.emails范围scopes.wl.emails scope允许对用户的电子邮件地址进行读访问.代码可能如下:

string[] scopes = new string[] { "onedrive.readwrite", "wl.emails" };
var client = OneDriveClientExtensions.GetUniversalClient(scopes) as OneDriveClient;
await client.AuthenticateAsync();
//get the access_token
var AccessToken = client.AuthenticationProvider.CurrentAccountSession.AccessToken;
//REST API to request info about the signed-in user
var uri = new Uri($"https://apis.live.net/v5.0/me?access_token={AccessToken}");

var httpClient = new System.Net.Http.HttpClient();
var result = await httpClient.GetAsync(uri);
//user info returnd as JSON
string jsonUserInfo = await result.Content.ReadAsStringAsync();
if (jsonUserInfo != null)
{
    var json = Newtonsoft.Json.Linq.JObject.Parse(jsonUserInfo);
    string username = json["name"].ToString();
    string email = json["emails"]["account"].ToString();
}
Run Code Online (Sandbox Code Playgroud)