【问题标题】:Nest API 401 Response Error using RestSharp c#Nest API 401 响应错误使用 RestSharp c#
【发布时间】:2017-02-25 05:43:10
【问题描述】:

我正在尝试从 Nest API 获取我的设备/结构数据的 JSON 响应。 "https://developer-api.nest.com/"

我已经能够使用 Postman 检索具有相同 url 的数据,同时只指定内容类型和授权标头。我基本上将 Postman 中的代码 sn-p 复制到了我的程序中,但运行时收到 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",
        ...

【问题讨论】:

  • 你有 API 调用的输出吗?

标签: c# restsharp nest-api


【解决方案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 数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多