从C#Web应用程序访问Google Drive Files

时间:2012-09-18 03:26:03

标签: c# .net web-applications google-drive-api access-token

您好我在访问Google云端硬盘SDK时遇到了一些问题,主要是验证步骤。

我的.Net网络应用中有两个主要页面 - Default.aspx.csWebForm1.aspx.cs。 在Default.aspx我有一个hyperlink控件,当用户点击链接时会将其带到Google authentication page

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&redirect_uri=http://localhost/GoogleDriveTest/GoogleDriveTest/GoogleDriveTest/WebForm1.aspx&state=/profile&client_id=*CLIENT_ID*&approval_prompt=force

将用户重定向回REDIRECT_URIWebForm1)后,我会使用此段代码访问authorization代码:

HttpRequestInfo request = new HttpRequestInfo(Request);
code = Request.QueryString["code"];

现在我被卡住了。我知道我现在需要POST这段代码:

https://accounts.google.com/o/oauth2/token <insert POST parameters here>

但我完全不知道如何做到这一点。我尝试了很多东西,但我得到的只是:

Server time out error - it failed to connect to the requested server

如何解决此问题?


编辑24/09/2012:

使用Visual Studio 2012的新版本,他们已经合并了OAuth,因此它负责身份验证: http://www.asp.net/vnext/overview/videos/oauth-in-the-default-aspnet-45-templates

这意味着用户可以使用Google等外部帐户登录本地网络应用程序。

这是否意味着,一旦用户通过Google登录,我就可以获取我需要的Google云端硬盘文件?或者这只是为了使本地Web应用程序中的注册处理更容易?

再次感谢。


这是我的错误:

[SocketException (0x274c): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond [2404:6800:4008:c01::54]:443]
   System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +251
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) +279

[WebException: Unable to connect to the remote server]
   System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) +6098637
   System.Net.HttpWebRequest.GetRequestStream() +13
   GoogleDriveTest.WebForm1.Page_Load(Object sender, EventArgs e) in C:\Projects\GoogleDriveTest\GoogleDriveTest\GoogleDriveTest\WebForm1.aspx.cs:101
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

解决!!

我的问题是我的工作区中有一个代理,它不允许任何与所需URL的连接。所以我在我的浏览器中关闭了代理,它绕过它直接成功获取访问令牌所需的URL:D

2 个答案:

答案 0 :(得分:0)

Refer to the QuickStart(请注意.NET选项卡!),其中显示了如何使用DotNetOpenAuth库执行此操作。

请注意以下一行:

// Retrieve the access token by using the authorization code:
return arg.ProcessUserAuthorization(authCode, state);

答案 1 :(得分:0)

该文档包含一个用C#编写的完整Web应用程序示例,您可以将其用作参考:

https://developers.google.com/drive/examples/dotnet

它是一个ASP.NET MVC应用程序,但授权部分可以在Web窗体应用程序中轻松重用。

有关授权流程的更多详细信息,请查看有关如何Retrieve and Use OAuth 2.0 Credentials

的文档