从Dotnet Google API获取用户电子邮件信息

时间:2013-04-22 21:57:31

标签: c# .net google-drive-api gdata

我已经为gData和Drive C#API两个单独的Oauth2实现,分别在OAuth2Parameters和AuthorizationState中存储令牌信息。我能够刷新令牌并将其用于必要的API调用。我正在寻找一种方法来获取用户的信息,主要是电子邮件地址或域名。

我尝试了Retrieve OAuth 2.0 Credentials的演示,但我收到类似于rapsalands'的编译错误。问题here,说出来

can't convert from
'Google.Apis.Authentication.OAuth2.OAuth2Authenticator<
Google.Apis.Authenticatio‌​n.OAuth2.DotNetOpenAuth.NativeApplicationClient>'
to 'Google.Apis.Services.BaseClientService.Initializer'.

我刚刚抓住Oauth2 api dlls的最新版本,所以我不会想到它。

所有其他code samples我看到使用UserInfo API提及,但我无法找到任何可以使用它的C#/ dotnet api而不是简单地做直接的GET / POST请求。

有没有办法使用我已经拥有的一个C#apis的令牌获取此信息而不会发出新的HTTP请求?

2 个答案:

答案 0 :(得分:6)

您需要使用Oauth2Service来检索有关用户的信息。

Oauth2Service userInfoService = new Oauth2Service(credentials);
Userinfo userInfo = userInfoService.Userinfo.Get().Fetch();

Oauth2Service位于以下库中:https://code.google.com/p/google-api-dotnet-client/wiki/APIs#Google_OAuth2_API

答案 1 :(得分:1)

对于@ user990635上面的问题。虽然问题有点过时,但以下内容可能对某人有所帮助。该代码使用Google.Apis.Auth.OAuth2版本

  var credentials =
                    await GoogleWebAuthorizationBroker.AuthorizeAsync(
                            new ClientSecrets {ClientId = clientID, ClientSecret = clientSecret},
                            new[] {"openid", "email"}, "user", CancellationToken.None);
                if (credentials != null)
                {
                    var oauthSerivce =
                        new Oauth2Service(new BaseClientService.Initializer {HttpClientInitializer = credentials});
                    UserInfo = await oauthSerivce.Userinfo.Get().ExecuteAsync();
                }