0

我在从 FourSquare 为我的 C# 桌面应用程序获取访问令牌时遇到问题。我在他们的网站上注册了我的应用程序并获得了客户端 ID 和秘密 ID。对于我的回调 url,我输入了 http..localhost:8080。我不知道该放什么,我知道它没有多大意义,但它就在那里。

我找到了一种使用浏览器获取访问令牌的方法。当我尝试以下网址时:

https://foursquare.com/oauth2/authenticate?client_id=MY_CLIENT_ID&response_type=token&redirect_uri=https:localhost:8080/

它试图重定向到:

http:localhost:8080/?accsess_token=OBTAINED_ACCSESS_TOKEN

所以你去,我得到了我的访问令牌。现在,我尝试通过查看 C# 中的响应标头在我的 C# 代码中做一些类似的事情,并且在 Location 标头中应该有:

http:localhost:8080/?accsess_token=OBTAINED_ACCSESS_TOKEN

但是我有一个问题,响应中没有 Location 标头。当我在浏览器中查看 HttpFox 中的响应标头时,响应内有一个带有我的链接的 Location 标头。

我已经在这里发布了我到目前为止所做的事情,我在这里碰到了一堵砖墙。如果有人知道从 FourSquare 获取桌面应用程序访问令牌的任何其他方式,或者有解决上述标题问题的方法。请张贴。如果有人对此有答案,我会请他喝啤酒,因为这是我工作任务的一部分。:)

到目前为止,这是我的代码。

 string url = "https://foursquare.com/oaut2/authenticate?client_id=E4HFYP1LRDSAL21WJVJ1EBT1NSG1DPRHSNXN0PFI10UIOX0N&response_type=token&redirect_uri=https:localhost:8080/";

HttpWebRequest request = null;
HttpWebResponse response = null;
try
{
    request = WebRequest.Create(url) as HttpWebRequest;
    response = request.GetResponse() as HttpWebResponse;
    request.AllowAutoRedirect = false;
    int status = (int)response.StatusCode;
    Console.WriteLine("Request headers: ");
    Console.WriteLine("-------------------------------------------------------------");
    foreach (string s in request.Headers)
    {
         Console.WriteLine(s + ": " + request.Headers[s]);
    }
    Console.WriteLine("Response headers: ");
    Console.WriteLine("-------------------------------------------------------------");

    foreach (string header in response.Headers)
        Console.WriteLine(header + ": " + response.Headers[header]);
}
catch (Exception x)
{
    Console.WriteLine(x.Message);
}
4

3 回答 3

2

在 C# 中,您无法在没有用户干预的情况下获取访问令牌,pord911 提供了解决方案。但正如他所说,它仍然令人讨厌。Foursequare 应该以与 twitter 相同的方式重新设计他们的 Oauth2 Rest API。

话虽如此,您可能想看看这项工作:https ://codeload.github.com/ignatandrei/4SqDayHistory/zip/master

于 2016-12-25T01:06:13.453 回答
0

看起来你拼错了网址。你有foursquare.com/oaut2,它应该是foursquare.com/oauth2

另外,请注意您的 URL 格式不正确。它应该是“http://localhost:8080”,而不是“http:localhost:8080”。请务必在您的代码以及您在foursquare.com/oauth上注册的重定向URI 中进行更改

于 2012-11-08T19:53:29.207 回答
0

谢谢回复。但是我解决了一个 webbrowser 对象的问题,该对象在单击按钮时触发,并带有用于获取 access_token 的初始 url。当使用 access_token 将重定向触发到我的“http://localhost...”url 时,会触发一个 Form_Navigated 事件,处理程序会搜索“access_token”并捕获它。当找到“access_token”时,webbrowser 窗口会自动隐藏,留下您的初始窗口和来自foursquare 的列出数据。仅仅为了获取 access_token 而显示一个空白表格几秒钟看起来有点讨厌,但它可以工作。我在foursquare上找到了这个解决方案。但他们提出了适用于 Android 应用程序的解决方案。链接在这里。

https://github.com/foursquare/android-oauth-example/blob/master/workspace/android-oauth-example/src/com/foursquare/android/oauth/ActivityWebView.java

于 2012-11-15T21:30:33.853 回答