我正在使用网络API来接收我想在桌面应用程序中处理的OAuth令牌。 Web API将用户重定向到localhost:15779,我可以使用下面的类来监听我的应用程序 这里的问题是所提到的API通过HTTP GET发送令牌但不使用查询参数(?key = value)但是片段参数(#key = value)并且我无法改变该行为,因为它不是我的API。 /> 例如:
http://127.0.0.1:15779/#access_token=b5c283xxxxxxxxe3lili5s003f5fqp&scope=chat_login+user_read
如果您看到下面的代码,您会注意到我将HttpListenerContext.Request.Url.Fragment写入recievedData变量,以便在浏览器中显示它,以用于调试目的地。事情是:它是空的。
有关如何获取令牌的任何想法吗?
class HttpLstn
{
public String prefixes;
public static String recievedData = "";
private static ManualResetEvent _waitHandle = new ManualResetEvent(false);
public void start(string prefixes)
{
this.prefixes = prefixes;
if (prefixes == null || prefixes.Length == 0)
throw new ArgumentException("Wrong listener URL");
using (HttpListener listenOn = new HttpListener())
{
if (!listenOn.Prefixes.Contains(this.prefixes))
listenOn.Prefixes.Add(this.prefixes);
listenOn.Start();
Thread.Sleep(100);
IAsyncResult result = listenOn.BeginGetContext(new AsyncCallback(ListenerCallback), listenOn);
_waitHandle.WaitOne();
Thread.Sleep(100);
listenOn.Close();
}
}
public static void ListenerCallback(IAsyncResult result)
{
try
{
HttpListener listenOn = (HttpListener)result.AsyncState;
HttpListenerContext context = listenOn.EndGetContext(result);
HttpListenerRequest request = context.Request;
//DEBUG
//write URL Fragment to recievedData in order to display it in the browser for testing purposes
recievedData = context.Request.Url.Fragment;
//DEBUG
HttpListenerResponse response = context.Response;
string responseString = recievedData;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
_waitHandle.Set();
}
catch (HttpListenerException he) { }
catch (ObjectDisposedException oe) { }
}
}
答案 0 :(得分:1)
我也碰到了这个。结果是浏览器不会将片段部分发送到服务器;他们保留它并使用它滚动到返回文档的指定部分。