C#内置谷歌硬盘

C#内置谷歌硬盘,c#,google-drive-api,C#,Google Drive Api,在不同的功能中,我想在我的C#应用程序中加入谷歌硬盘,让用户登录并访问硬盘文件。 我在这个网站上以及从其他来源研究了很多代码,并在以下方面取得了成功: UserCredential credential; using (var stream = new FileStream("client_id.json", FileMode.Open, FileAccess.Read)) { string credPath = System.Environment.GetFolderPath

在不同的功能中,我想在我的C#应用程序中加入谷歌硬盘,让用户登录并访问硬盘文件。 我在这个网站上以及从其他来源研究了很多代码,并在以下方面取得了成功:

UserCredential credential;

using (var stream =
    new FileStream("client_id.json", FileMode.Open, FileAccess.Read))
{
    string credPath = System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.Personal);
    credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        Scopes,
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
    Console.WriteLine("Credential file saved to: " + credPath);
}

// Create Drive API service.
var service = new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

// Define parameters of request.
FilesResource.ListRequest listRequest = service.Files.List();
//listRequest.PageSize = 10;
listRequest.Fields = "nextPageToken, files(id, name)";

// List files.
IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute().Files;
Console.WriteLine("Files:");
if (files != null && files.Count > 0)
{
    foreach (var file in files)
    {
        Console.WriteLine("{0} ({1})", file.Name, file.Id);
    }
}
else
{
    Console.WriteLine("No files found.");
}
Console.Read();
UserCredential凭证;
使用(var)流=
新的文件流(“client_id.json”、FileMode.Open、FileAccess.Read))
{
字符串credPath=System.Environment.GetFolderPath(
系统、环境、专用文件夹、个人);
credPath=Path.Combine(credPath,“.credentials/drive dotnet quickstart.json”);
凭证=GoogleWebAuthorizationBroker.AuthorizationAsync(
GoogleClientSecrets.Load(stream.Secrets),
范围,
“用户”,
取消令牌。无,
新文件数据存储(credPath,true))。结果;
Console.WriteLine(“凭证文件保存到:”+credPath);
}
//创建驱动器API服务。
var service=new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer=凭证,
ApplicationName=ApplicationName,
});
//定义请求的参数。
fileResource.ListRequest ListRequest=service.Files.List();
//listRequest.PageSize=10;
listRequest.Fields=“nextPageToken,files(id,name)”;
//列出文件。
IList files=listRequest.Execute().files;
Console.WriteLine(“文件:”);
if(files!=null&&files.Count>0)
{
foreach(文件中的var文件)
{
Console.WriteLine(“{0}({1})”,file.Name,file.Id);
}
}
其他的
{
WriteLine(“未找到任何文件”);
}
Console.Read();
我必须在Google Drive网站上为开发者获取我的证书。 这段代码运行得很好,但这意味着我的应用程序的每个用户都必须手动生成他们自己的Google Drive凭据,我不知道如何实现自动化


我的目标是为用户提供一个界面,显示两个输入谷歌电子邮件和密码的框,然后进行身份验证,如果成功,用户将可以访问他们的文件。

欢迎来到开放身份验证的世界。要让您的应用程序访问用户数据,他们必须授予您的应用程序访问其数据的权限或“授权”。您发送的作用域用于告诉用户运行应用程序所需的权限。他们将获得一个弹出窗口,要求他们使用这些权限授权您的应用程序。一旦获得授权,您就可以访问他们的数据

要求用户输入登录名和密码以访问帐户称为客户端登录。客户端登录在2015年被谷歌关闭,您无法使用登录名和密码访问他们的帐户。您必须使用Oauth2并像代码当前所做的那样请求访问


您的代码按原样工作,并按其应有的方式工作。您无法自动进行授权,他们必须自己单击“it”按钮

欢迎来到开放身份验证的世界。要让您的应用程序访问用户数据,他们必须授予您的应用程序访问其数据的权限或“授权”。您发送的作用域用于告诉用户运行应用程序所需的权限。他们将获得一个弹出窗口,要求他们使用这些权限授权您的应用程序。一旦获得授权,您就可以访问他们的数据

要求用户输入登录名和密码以访问帐户称为客户端登录。客户端登录在2015年被谷歌关闭,您无法使用登录名和密码访问他们的帐户。您必须使用Oauth2并像代码当前所做的那样请求访问


您的代码按原样工作,并按其应有的方式工作。您无法自动进行授权,他们必须自己单击“it”按钮

请检查此项将有助于提高您的内容质量请检查此项将有助于将您的内容质量放在第一位,感谢您花时间阅读我的问题并回答。经过我的研究和你的回答,我认为ir更不可能实现我的想法,因为现在没有办法开发一个应用程序,为用户提供访问其google drive的权限,他们将始终被迫生成访问api功能的开发人员凭据。用户只需一眼批准你的应用程序,但就我而言,这将是用户通过应用程序只与一个驱动器交互的方式。我的目标是,如果谷歌API可以做到的话,让每个用户登录我的应用程序,使用他的gmail和密码(在我的应用程序中,或在浏览器中)访问,然后他们可以在应用程序中的个人驱动器中以某种列表的形式查看文件。但是如果我理解正确的话,那么唯一的方法就是为每个用户生成一个开发人员凭据,这就是我的问题,当一个用户验证您的应用程序时,您可以为该用户创建一个刷新令牌。“user”是与刷新令牌关联的用户的名称。可以将任意数量的用户附加到开发人员凭据。开发人员凭据仅用于识别您的应用程序您可以拥有无限数量的用户对您的应用程序进行身份验证。是的,我可以理解,但我没有找到让每个用户登录应用程序并查看其驱动器的个人文件(在列表或类似内容中)的方法。对不起,如果我把你逼疯了,或者我在解释我的目标时不够清楚。我的意思是,在我研究和阅读您的答案时,我的应用程序的用户将读取我驱动器的开发人员凭据,并且只访问我的文件,我希望每个用户都访问他们的个人驱动器。首先,感谢您花时间阅读我的问题和回答。经过我所有的研究和你的回答,我认为ir更不可能实现我的想法,因为现在没有办法开发一个应用程序,让用户访问他的谷歌硬盘,他们总是被迫