HttpClient添加JSON授权标头

时间:2015-10-02 00:27:36

标签: c# json authorization httpclient

我遇到了LogMeIn api身份验证问题。 授权值是JSON对象。 运行我的代码时,我遇到了FormatException错误。

"类型' System.FormatException'的第一次机会异常发生在System.Net.Http.dll中 附加信息:价值格式' {" companyId":9999999," psk":" o2ujoifjau3ijawfoij3lkas3l2"}'无效。"

        var client = new HttpClient();
        client.BaseAddress = new Uri("http://secure.logmein.com/public-api/v1/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Add("Accept", "application/JSON; charset=utf-8");

        string s = "{\"companyId\":9999999,\"psk\":\"o2ujoifjau3ijawfoij3lkas3l2\"}";

        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(s);

       HttpResponseMessage response = client.GetAsync("authentication").Result;

在这种情况下,如何格式化授权密钥?

2 个答案:

答案 0 :(得分:2)

这种情况发生,因为LogMeIn不使用像“Basic”这样的标准身份验证模式。您应该添加邮件标题而不进行验证:

string s = "{\"companyId\":9999999,\"psk\":\"o2ujoifjau3ijawfoij3lkas3l2\"}";
string h = "Authorization";

client.DefaultRequestHeaders.TryAddWithoutValidation(h, s);

请参阅herehere

您可以使用名为Fiddler的工具(Web调试器)检查您发送的请求是否具有正确的标头(这是Web开发人员必备的工具)。 您需要将以下配置添加到web.config中,以便通过Fiddler代理路由http流量:

<system.net>
   <defaultProxy>
       <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
   </defaultProxy>
</system.net>

或在请求中指定它自己:

client.Proxy = new Uri("http://localhost:8888/"); // default address of fiddler

答案 1 :(得分:-1)

我使用了RestSharp并且能够对其进行身份验证。

        var request = new RestRequest(Method.GET);
        request.AddHeader("authorization", "{\"companyId\":9999999,\"psk\":\"o2ujoifjau3ijawfoij3lkas3l2\"}");
        request.AddHeader("accept", "application/Json; charset=utf-8c");
        IRestResponse response = client.Execute(request);

但是,我仍然无法让它与HttpClient一起工作。