2017-02-24 16 views
0

Nest APIからデバイス/構造体データのJSON応答を取得しようとしています。 "https://developer-api.nest.com/"Nest API 401 RestSharpを使用した応答エラーc#

私は、コンテンツタイプと承認ヘッダーを指定するだけで、同じ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", 
     ... 
+0

APIコールの出力結果はありますか? – urman

答えて

1

は、問題を発見しました。

Nest APIの初期応答は(ほとんどの場合、)Firebase APIサーバにリダイレクトされます。私はfalseにFollowRedirectsプロパティを設定

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);    
} 

注:私は、以下のif文を追加することで、リダイレクトを処理していました。 2番目の応答コンテンツには、期待されるJSONデータが含まれています。

関連する問題