使用RestSharp c#Nest API 401响应错误

时间:2017-02-24 00:23:25

标签: c# restsharp nest-api

我正在尝试从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",
        ...

1 个答案:

答案 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数据。