【问题标题】:FreeAgent API (OAuth) From c#来自 c# 的 FreeAgent API (OAuth)
【发布时间】:2012-12-24 19:33:57
【问题描述】:

我正在尝试连接到 API(在本例中为 freeagent)以获取一些数据。我使用 Googles OAuth Playground 为我生成了一个令牌。

var req = (HttpWebRequest)WebRequest.Create("https://api.freeagent.com/v2/recurring_invoices");

req.Headers["Authorization"] = "Bearer " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken));

req.ContentType = "application/xml";
req.Accept = "application/xml";
req.Method = "GET";

// and get the response
var resp = req.GetResponse();
var streamIn = new StreamReader(resp.GetResponseStream());
returnData = streamIn.ReadToEnd();
streamIn.Close();

return resp;

现在我正在松散地尝试转换以下内容:https://dev.freeagent.com/docs/using_curl

我经常收到错误请求 HTTP 400 - 有人对可能导致此问题的原因有任何建议吗?

【问题讨论】:

  • 很可能您的令牌不被接受。您是否必须转换为 Base-64 字符串?如果您在没有转换的情况下放入您的访问令牌怎么办?
  • 即使没有编码也是一样的结果。

标签: c# api oauth oauth-2.0


【解决方案1】:

您不需要对令牌进行 base64 编码,只需将 Authorization 标头设置为“Bearer” + _accessToken。如果这仍然不起作用,请尝试使用http://httpbin.org/get 作为 URL 来查看您的请求,看看是否还有其他可能的问题。

【讨论】:

    【解决方案2】:

    我的大部分 api 都在使用 RestSharp:

    https://github.com/nicwise/FreeAgent

    我是为我的 iPhone 应用程序 mobileAgent 编写的,但它相当基本 .NET,所以它应该适用于任何东西。

    我的身份验证注入代码看起来很像你的:

    protected void SetAuthentication(RestRequest request)
    {
      request.AddHeader("Authorization", "Bearer " +
    Client.CurrentAccessToken.access_token);
    }
    

    你有没有运行 fiddler 或类似的东西来看看到底发生了什么 在电线上?这通常会有所帮助。

    【讨论】:

    • Cheers Nic,将检查您的项目。我有更多的时间来看看它,提琴手是我的下一个选择。看看情况如何。
    【解决方案3】:

    解决方案是同时传递 UserAgent。

    示例...

    req.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17";
    

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 2011-09-18
      • 2021-08-10
      相关资源
      最近更新 更多