2016-12-06 59 views
0

我想從使用他們的API和oAuth的uStream獲取數據。我可以獲得身份驗證令牌,該令牌在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客戶端,比如失眠它會工作......我可以獲取數據。

關於我在做什麼錯的任何想法?

謝謝!

回答

1

假設token不與一個單一的空間前綴,那麼這行:

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

應替代爲(添加空間承載後):

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

另外,對數據的請求GET不要求將Content-Type標頭添加到請求中uest;儘管包括不太可能導致錯誤。

0

正如João所說,主要問題將是字符串「承載者」和標記本身之間缺失的空格字符。解決這個問題後,我很確定它會工作。 是的,Content-Type對於GET請求來說是多餘的,但它不會損害您的請求的成功。

此外,您不需要提供兩次客戶機密。這足以通過請求主體中的Authorization頭或client_secret屬性來提供它。

所以,這是足以提供祕密方式:

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

螞蟻在這種情況下,你不應該在請求體再次提供的祕密,這裏的修改後的呼叫,在原有基礎上的代碼:

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

您可以添加一些代碼,使您的答案更清晰嗎? –

+0

完成後,增加了一個例子 –

0

實際上有兩件事我錯了。第一個由@JoãoAngelo指出的是字符串之間的缺失空間:持票人&令牌。

第二個也是最讓人沮喪的是授權需要授權......與大寫A.現在它工作......感謝您的幫助。