1

Google ドライブ ログインのユーザー資格情報を取得する必要があります。Google ドライブにアカウントがあり、ユーザー情報を取得したいとします。これを C# で機能させるにはどうすればよいですか?

以下のコードを実行すると、エラーが発生します。

using System;
using System.Diagnostics;
using DotNetOpenAuth.OAuth2;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Drive.v2;
using Google.Apis.Drive.v2.Data;
using Google.Apis.Util;
using Google.Apis.Requests;
using System.Collections.Generic;
using System.Net;
using Google.GData.Client;
using Google.GData.Documents;
using Google.GData.Extensions;
using Google.Apis.Oauth2.v2;
using Google.Apis.Oauth2.v2.Data;
using Google.Apis.Authentication;
namespace google_drive_iterate_folders
{
    class Program
    {

    static DriveService BuildService(IAuthenticator credentials)
    {
        return new DriveService(credentials);
    }


    public static IAuthenticator GetCredentials(String authorizationCode, String state)
    {
        String emailAddress = "";
        try
        {
            IAuthorizationState credentials = ExchangeCode(authorizationCode);
            Userinfo userInfo = GetUserInfo(credentials);
            String userId = userInfo.Id;
            emailAddress = userInfo.Email;
            if (!String.IsNullOrEmpty(credentials.RefreshToken))
            {
                StoreCredentials(userId, credentials);
                return GetAuthenticatorFromState(credentials);
            }
            else
            {
                credentials = GetStoredCredentials(userId);
                if (credentials != null &&
                    !String.IsNullOrEmpty(credentials.RefreshToken))
                {
                    return GetAuthenticatorFromState(credentials);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred during code exchange.");
            // Drive apps should try to retrieve the user and credentials for
            // the current session.
            // If none is available, redirect the user to the authorization URL.
            e.AuthorizationUrl = GetAuthorizationUrl(emailAddress, state);
            throw e;
        }
        //catch ()
        //{
        //    Console.WriteLine("No user ID could be retrieved.");
        //}
        // No refresh token has been retrieved.
        String authorizationUrl = GetAuthorizationUrl(emailAddress, state);
        throw new NoRefreshTokenException(authorizationUrl);
    }

    /// <summary>
    /// Exchange an authorization code for OAuth 2.0 credentials.
    /// </summary>
    /// <param name="authorizationCode">Authorization code to exchange
    //// for OAuth 2.0 credentials.</param>
    /// <returns>OAuth 2.0 credentials.</returns>
    /// <exception cref="CodeExchangeException">An error occurred.</exception>
    static IAuthorizationState ExchangeCode(String authorizationCode)
    {
        var provider = new NativeApplicationClient(
            GoogleAuthenticationServer.Description,
            ClientCredentials.CLIENT_ID,
            ClientCredentials.CLIENT_SECRET);
        IAuthorizationState state = new AuthorizationState();
        state.Callback = new Uri(ClientCredentials.REDIRECT_URI);
        try
        {
            state = provider.ProcessUserAuthorization(authorizationCode, state);
            return state;
        }
        catch (ProtocolException)
        {
            throw new CodeExchangeException(null);
        }
    }

    /// <summary>
    /// Send a request to the User Info API to retrieve the user's information.
    /// </summary>
    /// <param name="credentials">OAuth 2.0 credentials to authorize
    //// the request.</param>
    /// <returns>User's information.</returns>
    /// <exception cref="NoUserIdException">An error occurred.</exception>
    static Userinfo GetUserInfo(IAuthenticator credentials)
    {
        Oauth2Service userInfoService = new Oauth2Service(credentials);
        Userinfo userInfo = null;
        try
        {
            userInfo = userInfoService.Userinfo.Get().Fetch();
        }
        catch (GoogleApiRequestException e)
        {
            Console.WriteLine("An error occurred: " + e.Message);
        }

        if (userInfo != null && !String.IsNullOrEmpty(userInfo.Id))
        {
            return userInfo;
        }
        else
        {
            throw new NoUserIdException();
        }
    }

    /// <summary>
    /// Retrieve an IAuthenticator instance using the provided state.
    /// </summary>
    /// <param name="credentials">OAuth 2.0 credentials to use.</param>
    /// <returns>Authenticator using the provided OAuth 2.0
    /// credentials</returns>
    public static IAuthenticator GetAuthenticatorFromState(
        IAuthorizationState credentials)
    {
        var provider = new StoredStateClient(
            GoogleAuthenticationServer.Description, ClientCredentials.CLIENT_ID,
            ClientCredentials.CLIENT_SECRET, credentials);
        var auth = new OAuth2Authenticator<StoredStateClient>(
            provider, StoredStateClient.GetState..
4

2 に答える 2

1

GoogleドライブSDKのドキュメントには、データベースにクレデンシャルを保存し、必要に応じてクレデンシャルを復元する方法を示す完全な.NETサンプルが含まれています。

これをチェックしてください:-https: //developers.google.com/drive/examples/dotnet

于 2012-11-06T09:48:25.730 に答える
0

OK、簡単に見てみました... 別の using ディレクティブがありません (コンパイル時ではなく実行時にエラーが発生することに驚いていますが、IDE はこれを確実に伝えることができます...)。

userinfo がどの名前空間に該当するかはわかりませんが、このリンクを見ると、欠落している google 名前空間しかわかりません。とはいえ、あまり期待はしていませんが…。

とにかく、グーグルはあなたの友達です。

于 2012-11-09T07:54:45.993 に答える