我正在尝试以下方法,由于授权问题而失败。我知道标题中的正确授权字符串在浏览器中是什么样的。
oauth_signature_method = “PLAINTEXT”
oauth_consumer_key = “嘟”
组oauth_token = “BOOP”
oauth_signature = “BAAP”;
我试图通过指定
来改进它using (HttpClient client = new HttpClient())
{
AuthenticationHeaderValue header = new AuthenticationHeaderValue(
"oauth_signature_method", "PLAINTEXT");
client.DefaultRequestHeaders.Authorization = header;
HttpResponseMessage message = await client.GetAsync(url);
result = await message.Content.ReadAsStringAsync();
}
然而,我被卡住了,因为我不确定如何指定标题的授权部分的多个参数。此外,当我执行上述操作时,我收到错误消息,即签名方法必须设置为纯文本,所以我很确定即使这种方法也可能像疯子一样有缺陷。
除了人们只指定一个参数的例子外,谷歌搜索没有给我任何东西。答案 0 :(得分:1)
简短回答:可能需要跳过验证然后使用 Add()。
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", header);
查看this
在您的情况下,您可以添加以下内容:
var headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\", " +
"oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\", " +
"oauth_token=\"{4}\", oauth_signature=\"{5}\", " +
"oauth_version=\"{6}\"";
var authHeader = string.Format(headerFormat,
Uri.EscapeDataString(oauth_nonce),
Uri.EscapeDataString(oauth_signature_method),
Uri.EscapeDataString(oauth_timestamp),
Uri.EscapeDataString(oauth_consumer_key),
Uri.EscapeDataString(oauth_token),
Uri.EscapeDataString(oauth_signature),
Uri.EscapeDataString(oauth_version)
);
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", authHeader);