【问题标题】:How to call Google API from .NET/C# Web Application如何从 .NET/C# Web 应用程序调用 Google API
【发布时间】:2013-10-19 14:38:40
【问题描述】:

我正在努力调用托管在 Google Cloud https://apis-explorer.appspot.com/apis-explorer/?base=https%3A%2F%2Finnovative-glass.appspot.com%2F_ah%2Fapi#p/mirror/v1/ 中的 API

据我了解,API 是作为 REST 服务公开的。我需要从 .net 应用程序进行休息服务调用。

我已经完成了 OAuth 身份验证。我按照https://developers.google.com/accounts/docs/OAuth2WebServer 给出的指导传递 access_token

我的代码:

UriBuilder uriBuilder = new UriBuilder("https://innovative-glass.appspot.com/_ah/api/mirror/v1/timeline");
string userId = Session["userId"] as string;
var state = Utils.GetStoredCredentials(userId);
NameValueCollection queryParameters = HttpUtility.ParseQueryString(uriBuilder.Query);
queryParameters.Set("access_token", state.AccessToken);
uriBuilder.Query = queryParameters.ToString();

var request = (HttpWebRequest)WebRequest.Create(uriBuilder.ToString());
request.Method = "GET";
var response = (HttpWebResponse)request.GetResponse();

我收到未经授权的异常。 我的理解是对的吗?我做得对吗?

【问题讨论】:

  • 我(和这里的许多人一样)不知道 .NET 库的详细信息。如果您可以看看来回的 HTTP,那么有很多人可能会发现问题。

标签: c# .net http rest google-glass


【解决方案1】:

似乎云端点不使用接受access_token 作为查询参数的Google API 默认值。根据Discovery document,等效查询参数是oauth_token,因此它应该与:

queryParameters.Set("oauth_token", state.AccessToken);

或者(我认为这是更好的解决方案)您还可以设置请求的 Authorization 标头,而不是将令牌添加为查询参数:

request.Headers.Add("Authorization", "Bearer " + state.AccessToken);

【讨论】:

    【解决方案2】:

    您从哪里获得 AccessToken,您确定它仍然是有效的令牌吗?请记住,访问令牌在生成后约一小时到期,但可以提前撤销。

    点击innovative-glass.appspot.com 上的登录按钮给我一个来源不匹配错误,所以看起来您也可能有配置问题。

    您是否能够仅使用 API Explorer 使其工作?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2017-10-24
      相关资源
      最近更新 更多