2016-12-06 3 views
0

私はAPIとoAuthを使用してuStreamからデータを取得しようとしています。 authトークンを取得できます。そのトークンはRest API Clientで動作し、データを取得できます。私が私のプロジェクトのデータを得ることができない...私は401 UNAUTH得続ける...oAuth uStream API

コード:

protected void Page_Load(object sender, EventArgs e) 
    { 
     var client = new RestClient("https://www.ustream.tv/oauth2/token"); 
     var request = new RestRequest(Method.POST); 
     request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx"); 
     request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
     request.AddParameter("application/x-www-form-urlencoded", "client_secret=xxxxxxxxxxxxx&client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody); 
     IRestResponse response = client.Execute(request); 

     IRestResponse<TokenObject> response2 = (IRestResponse<TokenObject>)client.Execute<TokenObject>(request); 

     var tknName = response2.Data.access_token; 

     GetData(tknName); 
    } 

     public void GetData(string token) 
    { 
     var client = new RestClient("https://api.ustream.tv/channels/206844441.json"); 
     var request = new RestRequest(Method.GET); 
     request.AddHeader("authorization", "Bearer" + token); 
     request.AddHeader("content-type", "application/x-www-form-urlencoded"); 

     IRestResponse jsonResponse = client.Execute(request); 

     IRestResponse<Channel> json2Response2 = (IRestResponse<Channel>)client.Execute<Channel>(request); 

     var blah = json2Response2.Content; 
    } 

jsonResponseが戻って401付属しています...しかし、私は不眠症のようなAPIクライアントにトークンを使用することができますそれは動作します...私はデータを取得することができます。

私が間違っていることに関するアイデアはありますか?

ありがとうございます! 、さらに

request.AddHeader("authorization", "Bearer " + token); 

を:(ベアラ後にスペースを追加)

request.AddHeader("authorization", "Bearer" + token); 

はなくあるべき:

答えて

1

仮定tokenは、単一のスペースと、この行を前置されていませんGETデータの要求では、Content-Typeヘッダーをreqに追加する必要はありませんそうだ。インクルードするとエラーが発生する可能性は低いですが。

0

Joaoが述べたように、主な問題は文字列 "Bearer"とトークン自体の間の空白文字の欠落です。あなたがこれを修正した後、私はそれがうまくいくと確信しています。 はい、Content-TypeはGET要求には必要ありませんが、リクエストの成功を害するものではありません。

さらに、クライアントシークレットを2回提供する必要はありません。これは、要求本体のAuthorizationヘッダーまたはclient_secretプロパティーを使用して提供するだけで十分です。

だから、それは秘密そのように提供するのに十分です:あなたがリクエストボディに再び秘密を提供してはならない。この場合には

request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx"); 

のAntを、ここで変更コールは、元のコードに基づいて、です:

request.AddParameter("application/x-www-form-urlencoded", "client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody); 
+0

答えをより明確にするためにいくつかのコードを追加できますか? –

+0

完了し、例を追加しました –

0

実際に私が間違っていた2つのことがありました。 @JoãoAngeloによって指摘された最初のものは、文字列の間に欠けていたスペースであった:ベアラー&トークン。

第2に、最も苛立っていたのは、承認が資本金Aである必要があったということでした。今はうまくいきます...助けてくれてありがとう。