我在使用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);
}
答案 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应用程序的解决方案。这是链接。