HttpClient授权头无效格式

10

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

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

头部键:Authorization

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

我做错了什么?


如果您像这样提供授权会发生什么?这是我的方法:client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes("example;foo"))); - Niklas
它是冒号 : 不是分号 ; - Alex K.
@Alex K,如果你在提到授权值,它是在我的情况下被写成的;这是一个字符串。 - Ege Bayrak
1个回答

22

通常,该授权标头具有格式 {scheme} {token},这就是您当前代码尝试验证的内容。

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

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("example;{0}", value));

基于您的示例,该请求将具有以下请求标头

Accept application/json
Authorization example;foo

2
对于任何试图使用谷歌的密钥格式key=blahblahblahblah的人来说,这个方法非常完美! - David McSpadden
谢谢,天啊。我无法告诉你验证有多烦人,我经常与需要格式“Authorization: code”而没有领域的服务进行交互。 - Watson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接