Quando chiamo le API di Google da un sito Web di Azure, ottengo 502 - Il server Web ha ricevuto una risposta non valida mentre fungeva da gateway o server proxy. Il codice esatto funziona sia dalla mia macchina locale che da una macchina virtuale di Azure.502 Risposta non valida quando si chiama Google Api dal sito Web di Azure
Il codice è semplicemente quello di ottenere un nome visualizzato da un utente di Google id
private string GetUserDetails(string userId)
{
var serviceAccountEmail = "[email protected]nt.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;
}
Questo è stato chiamato in un progetto WebAPI, ma ho estratto a una singola pagina web form asp.net a http://testgplus.azurewebsites.net/
Ho anche provato un semplice client REST con un ApiKey invece di utilizzare il precedente. Di nuovo questo funziona sulla VM, ma non sul sito web, dove ottengo il 403 Proibito. Ho aggiunto gli indirizzi IP del sito web & alla VM alla 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();
}
Sembra che non sia possibile chiamare un servizio Web esterno per un sito Web di Azure. Ho visto alcuni problemi simili, ad es. 502 requesting payment service inside azure 'website', ma nessuno dei suggerimenti ha funzionato. Qualcuno ha qualche idea su quale potrebbe essere la causa o la correzione?