Google Drive API - 示例代码不起作用

Posted

技术标签:

【中文标题】Google Drive API - 示例代码不起作用【英文标题】:Google Drive API - Example code is not working 【发布时间】:2013-12-19 16:08:16 【问题描述】:

我想使用 Google API 通过 dot net 将 SharePoint 文档传输到 Google Drive。为此,我想使用这个link Google Quick Start。

我已经跟踪了每一条信息。它在开头说“完成本页其余部分中描述的步骤,大约五分钟后,您将拥有一个简单的云端硬盘应用程序,可以将文件上传到 Google 云端硬盘”,但事实并非如此。

我从昨天开始尝试运行这个示例,但失败了。

// Register the authenticator and create the service
var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description, CLIENT_ID, CLIENT_SECRET);
var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);

看来这个代码示例已经过时了,谷歌API已经升级了。

警告来了

[Obsolete("GoogleAuthenticationServer 不再受支持,它将在 1.7.0-beta 中删除。考虑使用支持 .NET 4、.NET 的新 Google.Apis.Auth NuGet 包用于 Windows 应用商店应用程序, Windows Phone 7.5 和 8 以及可移植类库")]

另一个代码

var service = new DriveService(new BaseClientService.Initializer()

Authenticator = auth
);

还有错误

无法将类型“Google.Apis.Authentication.OAuth2.DotNetOpenAuth.NativeApplicationClient”隐式转换为“Google.Apis.Http.IConfigurableHttpClientInitializer”。存在显式转换(您是否缺少演员表?)

然后我在寻找[最新版本示例],在那里我找到了source files。 我也无法运行示例。

在这里我已成功通过身份验证,但随后出现重定向 Uri 错误 我的 Client_Secrets.JSON 看起来像,如您所见,我已将默认重定向 Uri 设置为 http://localhost/

"web":"auth_uri":"https://accounts.google.com/o/oauth2/auth","client_secret":"secret","token_uri":"https://accounts.google.com/o/oauth2/token","client_email":email","redirect_uris":["http://localhost/"],"client_x509_cert_url":"aa@developer.gserviceaccount.com","client_id":"id","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","javascript_origins":["http://localhost:53404/"]

现在我可以运行此应用程序,但如前所述出现错误

错误:redirect_uri_mismatch 请求中的重定向 URI:[[http://localhost:2430/authorize/]] 与注册的重定向 URI 不匹配

我真的不知道这个端口号是从哪里来的,这个授权是从哪里来的。正如你在我的 JSON 中看到的,我没有设置任何类似的东西。

我正在使用 VS 2010 SP1 Ultimate 和 Windows 7 home Basic。

我试图提供完整的信息,我的最终目标是在 Google 驱动器中上传文档。

【问题讨论】:

【参考方案1】:

您所遵循的教程使用的是旧版本的 google.api,这就是您看到不支持的原因。下面是一些关于它如何与新版本的 api 配合使用的教程。

http://daimto.com/google-oauth2-csharp/ http://daimto.com/google-drive-api-c/

【讨论】:

感谢 DalmTo 的回答,我已尝试您提供的第一个链接。它给了我我在 BOLD 中发布的相同错误我能够与谷歌的身份验证屏幕连接,但问题来自重定向 uri。再次在此处添加以供您参考。 请求中的重定向URI:localhost:4103/authorize与注册的重定向URI不匹配我真的不知道google从哪里追加端口号和授权字符串。 嗨@DaImTo,你能帮我解决上述重定向URI问题吗?非常感谢您的帮助。 重定向 URI 必须与您在 google apis 控制台中设置的相同。 在 google api 控制台-"redirect_uris":["localhost/"] 你可以从我在问题中作为代码块发布的 JSON 中找到它,现在当我运行它时,它是怎样的更改为随机端口号并附加授权字符串。就在我运行项目前几秒钟,它给了我以下错误。请求中的重定向 URI:localhost:4183/authorize 与注册的重定向 URI 不匹配 请不要在上述所有错误中使用不同的端口号 正在检查。如果它是 web 应用程序与已安装的应用程序,则存在差异。我应该意识到这一点。 code.google.com/p/google-api-dotnet-client/wiki/OAuth2我现在有一个会议,我回来后会尝试修复它,如果您还没有弄清楚,请发布它。【参考方案2】:

看看https://code.google.com/p/google-api-dotnet-client/source/browse/Tasks.ASP.NET.SimpleOAuth2/Default.aspx.cs?repo=samples。这是一个任务 API ASP.NET 示例。如您所见,您需要添加几行代码,但它可以工作。

【讨论】:

【参考方案3】:

我下载了 Eyal 提到的示例,并在与我自己的应用程序集成之前进行了编译。 .Net 需要为 4,尽管它声明它支持更高。

【讨论】:

【参考方案4】:

您必须在 Google 开发者控制台中设置重定向 URI,而不是在您的 JSON 中。在您的情况下,您可能希望将其设置为 http://localhost:2430/authorize/

【讨论】:

以上是关于Google Drive API - 示例代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Google Drive API Python 服务帐户示例

Drive API v3 的 Google Oauth2 范围请求不起作用

Google Drive API:更改文件的所有权不起作用(只有作家/读者有效)

在 Laravel 中使用 Google Drive API

google drive simple upload rest API的示例

Google Drive API失败,因为库的google.drive功能不存在