簡體   English   中英

使用RestSharp C#的Nest API 401響應錯誤

[英]Nest API 401 Response Error using RestSharp c#

我正在嘗試從Nest API獲取我的設備/結構數據的JSON響應。 https://developer-api.nest.com/

我已經能夠使用具有相同URL的Postman檢索數據,而僅指定內容類型和授權標頭。 我實質上是將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",
        ...

找到了問題。

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數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM