我遇到了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;
在这种情况下,如何格式化授权密钥?
答案 0 :(得分:2)
这种情况发生,因为LogMeIn不使用像“Basic”这样的标准身份验证模式。您应该添加邮件标题而不进行验证:
string s = "{\"companyId\":9999999,\"psk\":\"o2ujoifjau3ijawfoij3lkas3l2\"}";
string h = "Authorization";
client.DefaultRequestHeaders.TryAddWithoutValidation(h, s);
您可以使用名为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一起工作。