2015-01-20 65 views
1

我想在現有的API上發表一些請求。授權標頭httpclient後異常Base64

我試圖在Chrome上使用插件Postman使用該API,並且它工作得很好。

現在我必須從我的Windows Phone應用程序在C#中進行這些調用。

正如你看到它的工作原理。

現在,這裏是我使用的HttpClient最初試圖做的在C#:

(當然實例化_httpClient和BaseAdress在構造函數的I)

 this._httpClient.DefaultRequestHeaders.Accept.Clear(); 
     var plainTextBytes = System.Text.Encoding.UTF8.GetBytes("client_id:client_secret"); 
     var encodedAuth = System.Convert.ToBase64String(plainTextBytes); 
     this._httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(encodedAuth); 
     var formContent = new FormUrlEncodedContent(new[] 
     { 
      new KeyValuePair<string, string>("grant_type", "client_credentials") 
     }); 
     var res = await _httpClient.PostAsync("/oauth/token", formContent); 

它不會工作,我得到了一個FormatException。

然後我看了一下互聯網,發現了一些答案,人們說我應該使用常規頭文件並手動添加它,所以這就是我所做的。

 this._httpClient.DefaultRequestHeaders.Accept.Clear(); 
     this._httpClient.DefaultRequestHeaders.Add("Authorization", "Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ="); 
     var formContent = new FormUrlEncodedContent(new[] 
     { 
      new KeyValuePair<string, string>("grant_type", "client_credentials") 
     }); 
     var res = await _httpClient.PostAsync("/oauth/token", formContent); 

我得到同樣的異常。

標題授權實際上是client_id:在Base64中編碼的client_secret,這是該API的一個要求。

所以,如果有人可以提供一些幫助,會是不錯的:)

謝謝您的閱讀和幫助。 Guillaume。

回答

0

我終於設法找到解決方案,但我不確定。

我添加替換:

this._httpClient.DefaultRequestHeaders.Add("Authorization", "Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ="); 

通過

this._httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ="); 

感謝安東尼奧Here