System.Net.HttpListener 类

本文提供了此 API 参考文档的补充说明。

使用此类 HttpListener ,可以创建一个简单的 HTTP 协议侦听器来响应 HTTP 请求。 侦听器在对象的生存期内 HttpListener 处于活动状态,并且在其权限下在应用程序中运行。

若要使用 HttpListener,请使用 HttpListener 构造函数创建类的新实例,并使用 Prefixes 属性获取对包含指定应处理的统一资源标识符(URI)前缀 HttpListener 的字符串的集合的访问权限。

URI 前缀字符串由方案(http 或 https)、主机、可选端口和可选路径组成。 完整的前缀字符串的一个示例是 http://www.contoso.com:8080/customerData/。 前缀必须以正斜杠(“/”)结尾。 HttpListener与请求的 URI 最匹配的前缀的对象响应请求。 多个 HttpListener 对象无法添加相同的前缀; Win32Exception 如果 HttpListener 添加已使用的前缀,则会引发异常。

指定端口时,主机元素可以替换为“*”,以指示 HttpListener 如果请求的 URI 与任何其他前缀不匹配,则接受发送到端口的请求。 例如,若要在请求的 URI 未由任何 HttpListener处理时接收发送到端口 8080 的所有请求,前缀为 http://*:8080/。 同样,若要指定 HttpListener 接受发送到端口的所有请求,请将主机元素替换为“+”字符。 例如 https://+:8080。 “*”和“+”字符可以出现在包含路径的前缀中。

在对象HttpListener管理的 URI 前缀中支持 Wild卡 子域。 若要指定 wild卡 子域,请使用“*”字符作为 URI 前缀中主机名的一部分。 例如, http://*.foo.com/。 将此参数作为参数 Add 传递给方法。

警告

不应使用顶级野生卡绑定(http://*:8080/http://+:8080)。 顶级通配符绑定可能会为应用带来安全漏洞。 此行为同时适用于强通配符和弱通配符。 使用显式主机名而不是通配符。 如果可控制整个父域(区别于易受攻击的 *.com),则子域通配符绑定(例如,*.mysub.com)不具有此安全风险。 有关详细信息,请参阅 rfc7230 第 5.4 条

若要开始侦听来自客户端的请求,请将 URI 前缀添加到集合并调用 Start 该方法。 HttpListener 提供用于处理客户端请求的同步模型和异步模型。 使用HttpListenerContext方法或其异步对应BeginGetContext项、方法和方法返回GetContext的对象访问请求及其EndGetContext关联的响应。

如果应用程序在等待客户端请求时应阻止,并且一次只处理一个请求,则同步模型是合适的。 使用同步模型调用 GetContext 该方法,该方法等待客户端发送请求。 此方法将返回一个 HttpListenerContext 对象,以便在发生对象时进行处理。

在更复杂的异步模型中,应用程序在等待请求时不会阻止,并且每个请求都在其自己的执行线程中进行处理。 使用该方法 BeginGetContext 指定要为每个传入请求调用的应用程序定义方法。 在该方法中,调用 EndGetContext 该方法以获取请求、处理请求和响应。

在任一模型中,传入的请求都使用 HttpListenerContext.Request 属性进行访问,并由对象表示 HttpListenerRequest 。 同样,使用属性访问 HttpListenerContext.Response 响应,并由对象表示 HttpListenerResponse 。 这些对象与 HttpWebRequest 对象 HttpWebResponse 共享一些功能,但后者不能与它们一起使用 HttpListener ,因为它们实现客户端,而不是服务器,行为。

可能需要 HttpListener 客户端身份验证。 可以指定要用于身份验证的特定方案,也可以指定要使用的方案的委托。 必须要求某种形式的身份验证才能获取有关客户端标识的信息。 有关其他信息,请参阅属性UserAuthenticationSchemesAuthenticationSchemeSelectorDelegate属性。

注意

如果使用 https 创建 HttpListener ,则必须为该侦听器选择服务器证书。 否则,对此操作 HttpListener 的请求将失败,连接意外关闭。

注意

可以使用 Network Shell 配置服务器证书和其他侦听器选项(netsh.exe)。 有关更多详细信息,请参阅 Network Shell(Netsh)。 可执行文件开始随 Windows Server 2008 和 Windows Vista 一起交付。

注意

如果为客户端 HttpListener指定了多个身份验证方案,侦听器将按以下顺序对客户端进行质询: NegotiateNTLMDigest,然后 Basic

HTTP.sys

HttpListener 类基于 HTTP.sys该类构建,它是处理 Windows 所有 HTTP 流量的内核模式侦听器。 HTTP.sys 提供连接管理、带宽限制和 Web 服务器日志记录。 使用HttpCfg.exe工具添加 SSL 证书。