首页 > 解决方案 > HttpListener 不获取带有# 符号的参数

问题描述

我以这种方式启动服务器:

HttpListener httpListener = new HttpListener();
httpListener.Prefixes.Add("http://localhost:11000/");
httpListener.Start();
while (true)
{
     HttpListenerContext context = httpListener.GetContext();
     HttpListenerRequest request = context.Request;
}

然后发送两个请求:

  1. http://localhost:11000/?abc=123
  2. http://localhost:11000/?#abc=123

HttpListener 捕获第一个带有参数的请求,但第二个没有任何参数。我需要它,因为我正在尝试实现 Facebook Outh 并将 Facebook 答案移动到侦听特殊端口的 WPF 应用程序,但 Facebook 响应包含此符号“#”。如果获取请求包含 # 符号,我如何接收所有参数?

标签: c#.net

解决方案


浏览器从不发送 # 之后的 uri 部分。这是设计使然,因为 # url 片段用于客户端导航。

参见 RFC https://www.rfc-editor.org/rfc/rfc2396#section-4

如果您可以更改客户端上运行的代码,您可以将 URI 的一部分存储在 http 标头或请求的其他一些正文部分中。


推荐阅读