我正在尝试从Nest API获取我的设备/结构数据的JSON响应。 “https://developer-api.nest.com/”
我已经能够使用Postman使用相同的URL检索数据,同时仅指定内容类型和授权标头。我基本上将Postman的代码片段复制到我的程序中,但是在运行时我收到了401错误。
var client = new RestClient("https://developer-api.nest.com/");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Bearer " + access_token);
request.AddHeader("content-type", "application/json");
IRestResponse response = client.Execute(request);
以下是回复内容:
{"error":"unauthorized","type":"https://developer.nest.com/documentation/cloud/error-messages#auth-error","message":"unauthorized","instance":"e0a35869-6726-4192-85d5-d31482b28269"}
我是否需要以某种方式对access_token进行编码?
感谢您的回复。
以下是输出结果的示例:
{
"devices": {
"thermostats": {
"fbk1Kr983gWp-eN-V9pxnOcTsTatUX5X": {
"humidity": 15,
"locale": "en-US",
"temperature_scale": "F",
...
答案 0 :(得分:1)
发现了这个问题。
Nest API的初始响应是(大部分时间)重定向到其Firebase API服务器。我通过添加下面的if语句来处理重定向:
var client = new RestClient("https://developer-api.nest.com/");
client.FollowRedirects = false;
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Bearer " + access_token);
request.AddHeader("content-type", "application/json");
IRestResponse response = client.Execute(request);
if (response.StatusCode == HttpStatusCode.RedirectKeepVerb) // 307
{
client.BaseUrl = new Uri(initial_response.Headers[7].Value.ToString());
response = client.Execute(request);
}
请注意,我将FollowRedirects属性设置为false。第二个响应内容包含预期的JSON数据。