【问题标题】:HttpClient Adding JSON Authorization HeaderHttpClient 添加 JSON 授权标头
【发布时间】:2015-10-02 00:27:35
【问题描述】:

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

“在 System.Net.Http.dll 中发生了“System.FormatException”类型的第一次机会异常 附加信息:值 '{"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;

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

【问题讨论】:

    标签: c# json authorization httpclient


    【解决方案1】:

    发生这种情况是因为 LogMeIn 不使用“基本”等标准身份验证架构。您应该添加消息头而不进行验证:

    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
    

    【讨论】:

    • 似乎也可以在url参数中提供公司ID和PSK:
    • 感谢您的回复!根据指南的标题似乎是正确的。我试过你在那里写的东西,它没有抛出异常。 secure.logmein.com/welcome/documentation/EN/pdf/…。但是,由于字符串,我的身份验证似乎失败了。我还尝试了 client.DefaultRequestHeaders.Add("Authorization",s)。但是 System.FormatException 又出现了。
    • 尝试使用 TryAddWithoutValidation 方法(见更新答案)
    • 授权失败,但至少我不再收到格式问题。我正在尝试查找将 JSON 作为标头传入的示例。
    • 您能检查一下 Authorization 标头是否与文档中的一模一样吗?
    【解决方案2】:

    我使用了 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 一起工作,这让我很困扰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多