授权标题httpclient帖子异常Base64

时间:2015-01-20 23:57:23

标签: c# post header base64 httpclient

我正在尝试在现有API上发布一些请求。

我试图在Chrome上使用插件Postman来使用该API,但效果非常好。

现在我必须通过c#中的Windows手机应用程序拨打这些电话。

如你所见。

现在这是我在C#中首先尝试使用HttpClient做的事情:

(我当然会在Ctor中实现_httpClient和BaseAdress)

        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的要求。

所以,如果有人可以提供一些不错的帮助:)

感谢您的阅读和帮助。 纪尧姆。

1 个答案:

答案 0 :(得分:0)

我终于设法找到了解决方案,但我对此并不确定。

我添加替换:

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

通过

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

感谢Antonio Here