502从Azure网站调用Google Api时响应无效
当我从Azure网站调用Google API时,我得到了502-Web服务器在充当网关或代理服务器时收到了无效响应。确切的代码可以在我的本地机器和Azure VM上运行 代码只是从Google用户id获取显示名称502从Azure网站调用Google Api时响应无效,azure,google-api,Azure,Google Api,当我从Azure网站调用Google API时,我得到了502-Web服务器在充当网关或代理服务器时收到了无效响应。确切的代码可以在我的本地机器和Azure VM上运行 代码只是从Google用户id获取显示名称 private string GetUserDetails(string userId) { var serviceAccountEmail = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccoun
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项目中调用的,但我已将其提取到位于的一个单页asp.net web表单中
我还尝试了一个简单的REST客户机,它使用了一个ApiKey,而不是上面提到的。这同样适用于虚拟机,但不适用于网站,我在那里得到了403。我已经将网站和虚拟机的IP地址添加到Google开发者控制台
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服务。例如,我见过一些类似的问题,但这些建议都不起作用。有人知道原因或解决方法是什么吗?。嗨,科林·米洛夫斯基
您在哪里创建证书,在应用程序_Start中,还是在WebApiConfig注册方法中
在哪里使用此代码
makecert -r -n "CN=abdullahsargin.com, E=sargin48@gmail.com" -sky exchange -b 11/01/2015 -pe -sv myhost.pvk myhost.cer
pvk2pfx -pvk myhost.pvk -spc myhost.cer -pfx myhost.pfx -po Test.123
在global.asax应用程序中\u启动
try
{
var certFile = Server.MapPath("~/App_Data/myhost.pfx");
var cert = new X509Certificate2(certFile, "Test.123",
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
}
catch (Exception exc)
{
_tools.LogError(exc);
}
。
此方法在本地上运行成功,但在azure get 502中,在这段代码中,我逐行测试此方法
var code = await _userManager.GeneratePasswordResetTokenAsync(user.Id);
此方法的完整性
[HttpGet, AllowAnonymous]
public async Task<HttpResponseMessage> ForgotPassword([FromUri] ForgotPasswordViewModel model)
{
try
{
var code = await _userManager.GeneratePasswordResetTokenAsync(user.Id);
return Request.CreateResponse(HttpStatusCode.OK, new { model = user });
var url = "http://abdullahsargin.com#/account/resetPassword/" + user.Id + "/" + code;
await _userManager.SendEmailAsync(user.Id, "Reset Password",
"Please reset your password by clicking here: <a href=\"" + url + "\">link</a>");
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception exc)
{
MyTools.LogError(exc.GetBaseException());
return Request.CreateResponse(HttpStatusCode.BadRequest, exc.GetBaseException());
}
}
[HttpGet,AllowAnonymous]
公共异步任务ForgotPassword([FromUri]ForgotPasswordViewModel)
{
尝试
{
var code=await\u userManager.GeneratePasswordResetTokenAsync(user.Id);
return Request.CreateResponse(HttpStatusCode.OK,new{model=user});
变量url=”http://abdullahsargin.com#/account/resetPassword/“+user.Id+”/“+代码;
等待\u userManager.sendmailasync(user.Id,“重置密码”,
“请单击此处重置密码:”;
返回Request.CreateResponse(HttpStatusCode.OK);
}
捕获(异常exc)
{
LogError(exc.GetBaseException());
return Request.CreateResponse(HttpStatusCode.BadRequest,exc.GetBaseException());
}
}
我在本页找到了我的解决方案
public UserManager() : base(new UserStore<ApplicationUser>(new MyDbContext()))
{
// other setup
this.UserTokenProvider = new TotpSecurityStampBasedTokenProvider<ApplicationUser, string>();
}
为了我的解决方案
public UserManager() : base(new UserStore<ApplicationUser>(new MyDbContext()))
{
// other setup
this.UserTokenProvider = new TotpSecurityStampBasedTokenProvider<ApplicationUser, string>();
}
public UserManager():base(新的UserStore(新的MyDbContext()))
{
//其他设置
this.UserTokenProvider=new-TotpSecurityStampBasedTokenProvider();
}
我以前看过你的问题,但没有注意到解决方案。。。我现在也有了。。生成证书时,请添加:
var certificate = new X509Certificate2(p12Path, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
//(notice the X509KeyStorageFlags.MachineKeySet |)