我正在尝试在现有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的要求。
所以,如果有人可以提供一些不错的帮助:)
感谢您的阅读和帮助。 纪尧姆。
答案 0 :(得分:0)
我终于设法找到了解决方案,但我对此并不确定。
我添加替换:
this._httpClient.DefaultRequestHeaders.Add("Authorization", "Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=");
通过
this._httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=");
感谢Antonio Here