【发布时间】:2016-07-17 02:19:24
【问题描述】:
更新:想通了。我确实需要添加授权标头,如下面的回答,但我也相信我的特定用例的问题是访问令牌(我通过 Postman 验证)需要更多范围来完全验证我,这是有道理的,因为这个 API 包含调查我正在尝试访问的,它们也与 Google 帐户相关联。一旦我将访问调查所需的额外范围以及下面的授权标头代码添加到令牌请求中,我就能够成功连接。
更多关于向 C# 代码添加作用域的信息可以在这里找到:http://www.oauthforaspnet.com/providers/google/
希望这可以帮助遇到类似问题的任何人。谢谢大家!
我正在尝试对 Google API 进行 GET 调用,但在我登录到 Gmail 时,它一直以“未经授权”响应。我已经在 StartUp.Auth.cs 中实现了 Google+ 登录,甚至保存了访问令牌以供以后使用。
那么如何让 HttpClient 授权我呢?
我有一个可用的访问令牌,但我不知道如何正确传递它。我看过用户名和密码的例子,但如果我已经有访问令牌,我应该不需要传递这些参数?如果有的话,当我在运行解决方案之前注销时,如果需要,我应该能够将用户重定向到登录页面。
当项目运行时,我期望的是 GET 调用以 json 形式返回的结果,但它总是说我“未经授权”,而且我可能在某处遗漏了 1 行代码。 .
这是我正在使用的代码:
using (HttpClient client = new HttpClient())
{
string _url = "https://www.googleapis.com/consumersurveys/v2/surveys?key={MY_API_KEY}";
client.BaseAddress = new Uri(_url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (HttpResponseMessage response = client.GetAsync(_url).Result)
{
if (response.IsSuccessStatusCode)
{
using (HttpContent content = response.Content)
{
var Content = content.ReadAsStringAsync();
ViewBag.GoogleResponse = Content.ToString();
}
}
else
{
// THIS IS ALWAYS UNAUTHORIZED!
ViewBag.GoogleResponse = response.StatusCode + " - " + response.ReasonPhrase;
}
}
}
请提供想法或建议。谢谢!
【问题讨论】:
-
试试:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxx");其中 xxx 是你的令牌 -
如果您按照developers.google.com/identity/protocols/OAuth2 获取令牌,那么我会说应该可以。令牌被授权的范围是否扩展到您尝试执行的操作? ViewBag.GoogleAccessToken 是否确定已填充?
-
是的,我已经测试了在页面渲染上打印出来的令牌,它是在 GET 调用之前设置的。不过,您的答案与其他人相同,因此我将尝试更多地弄乱它并报告发生的情况。谢谢!
-
没问题。我想你的意思是他们的回答和我一样;)
-
我得到了 invalid_token 但这没有意义,因为令牌是刚刚创建的!我在这里提出了一个新问题:stackoverflow.com/questions/38403172/…
标签: c# asp.net-mvc httpclient