如何在HttpClient上为授权指定多个参数?

时间:2014-11-13 07:36:49

标签: c# oauth http-headers authorization dotnet-httpclient

我正在尝试以下方法,由于授权问题而失败。我知道标题中的正确授权字符串在浏览器中是什么样的。

  

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();
}

然而,我被卡住了,因为我不确定如何指定标题的授权部分的多个参数。此外,当我执行上述操作时,我收到错误消息,即签名方法必须设置为纯文本,所以我很确定即使这种方法也可能像疯子一样有缺陷。

除了人们只指定一个参数的例子外,谷歌搜索没有给我任何东西。

1 个答案:

答案 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);