HttpClient授权标头无效格式

时间:2018-04-13 14:09:03

标签: c# authorization dotnet-httpclient

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

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

标题键:授权

值:示例; 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);

我做错了什么?

1 个答案:

答案 0 :(得分:3)

通常,授权标头的格式为{scheme} {token},这是尝试使用当前代码验证的格式。

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

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("example;{0}", value));
基于您的示例的

将具有以下请求标头

Accept application/json
Authorization example;foo