foursquare访问令牌C#

时间:2012-11-08 16:21:09

标签: foursquare

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

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

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

它尝试重定向到:

的http:本地主机:8080 / accsess_token = OBTAINED_ACCSESS_TOKEN

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

的http:本地主机: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);
}

3 个答案:

答案 0 :(得分:2)

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

话虽这么说,你可能想看看这项工作:https://codeload.github.com/ignatandrei/4SqDayHistory/zip/master

答案 1 :(得分:0)

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

另请注意,您的网址格式错误。它应该是“http:// localhost:8080”,而不是“http:localhost:8080”。请务必在代码中以及foursquare.com/oauth

中注册的重定向URI中进行更改

答案 2 :(得分:0)

感谢您的回复。但是我用一个webbrowser对象解决了这个问题,该对象在按钮点击时触发,并使用初始url获取access_token。当使用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