HttpClient授权标头格式无效

Ege*_*rak 2 c# authorization dotnet-httpclient

当我尝试GET使用下面的地址和授权值进行请求时,我没有任何问题。

地址:http//example.com/xyz.svc/branches/?latitude = 0&longitude = 0&range = 20000

标头密钥:授权

值:example; foo

当我尝试使用时,HttpCLient出现授权标头值的格式无效错误

这就是我尝试的方式

HttpClient client = new HttpClient();

    string latitude = "0";
    string longitude = "0";
    string range = "2000";

    string uri = "/xyz.svc/branches/?latitude=0&longitude=0&range=20000;

    string value = "foo";

    client.BaseAddress = new Uri("http://example.com");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Add("Authorization", String.Format("example;{0}", value));

    HttpResponseMessage response = await client.GetAsync(uri);

    var responseJson = await response.Content.ReadAsStringAsync();

    Console.WriteLine(responseJson);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Nko*_*osi 5

通常,授权标头具有一种格式,{scheme} {token}该格式就是它正在尝试使用当前代码进行验证的格式。

可以将某些服务器配置为接受不同的格式。为避免客户验证标准格式,请使用TryAddWithoutValidation

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("example;{0}", value));
Run Code Online (Sandbox Code Playgroud)

根据您的示例将具有以下请求标头

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("example;{0}", value));
Run Code Online (Sandbox Code Playgroud)

  • 对于任何试图使用 google 的 key=blahblahblahblah 格式的人来说,这很完美! (2认同)