2015-01-20 325 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