【发布时间】:2014-11-09 14:10:38
【问题描述】:
当我从 Azure 网站调用 Google API 时,我收到 502 - Web 服务器在充当网关或代理服务器时收到无效响应。确切的代码可以在我的本地机器和 Azure VM 上运行。
代码只是从 Google 用户 ID 中获取显示名称
private string GetUserDetails(string userId)
{
var serviceAccountEmail = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com";
var certFile = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/googlekey.p12");
var certificate = new X509Certificate2(certFile, "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { PlusService.Scope.PlusMe }
}.FromCertificate(certificate));
var service = new PlusService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Bayfront"
});
var request = service.People.Get(userId);
var person = request.Execute();
return person.DisplayName;
}
这是在 WebApi 项目中调用的,但我已将其提取到 http://testgplus.azurewebsites.net/ 的单页 asp.net 网络表单中
我还尝试了一个带有 ApiKey 的简单 REST 客户端,而不是使用上面的。这同样适用于 VM,但不适用于我得到 403 Forbidden 的网站。我已将网站和虚拟机的 IP 地址添加到 Google Developers Console。
private string GetUserDetails2(string userId)
{
var client = new RestClient("https://www.googleapis.com/plus/v1/people/" + userId);
var request = new RestRequest(Method.GET);
request.AddParameter("key", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
var response = client.Execute(request);
if (response.StatusCode == HttpStatusCode.OK)
{
dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(response.Content);
return result["name"]["givenName"];
}
return response.StatusCode.ToString();
}
我似乎无法为 Azure 网站调用外部 Web 服务。我见过一些类似的问题,例如502 requesting payment service inside azure 'website',但没有任何建议奏效。有没有人对可能的原因或解决方法有任何想法?
【问题讨论】:
标签: azure google-api