HttpListener 是 Windows 专用的轻量级 HTTP 服务器,需管理员权限配置 URL 保留,支持同步/异步请求处理、GET 参数解析与简易路由,适合本地调试和嵌入式场景,但不跨平台。

用 HttpListener 实现一个轻量级 Web 服务器,在 C# 中非常直接,适合做本地调试、微服务接口或嵌入式 HTTP 响应场景。它不依赖 IIS 或 Kestrel,开箱即用,但仅支持 Windows(.NET Framework 和 .NET Core/.NET 5+ 在 Windows 上可用)。
基础准备:启用权限与引用命名空间
Windows 上运行 HttpListener 需要 HTTP 命名空间保留权限(尤其非管理员账户),否则会抛出 AccessDeniedException。可提前执行命令(管理员权限运行):
netsh http add urlacl url=http://+:8080/ user=DOMAIN\username
代码中需引入命名空间:
using System;
using System.IO;
using System.Net;
using System.Text;
最简可用的监听循环
核心逻辑是:启动监听 → 等待请求 → 读取并响应 → 关闭连接。注意必须调用 context.Response.Close() 或使用 using 显式释放流,否则连接挂起。
1、数据调用该功能使界面与程序分离实施变得更加容易,美工无需任何编程基础即可完成数据调用操作。2、交互设计该功能可以方便的为栏目提供个性化性息功能及交互功能,为产品栏目添加产品颜色尺寸等属性或简单的留言和订单功能无需另外开发模块。3、静态生成触发式静态生成。4、友好URL设置网页路径变得更加友好5、多语言设计1)UTF8国际编码; 2)理论上可以承担一个任意多语言的网站版本。6、缓存机制减轻服务器
- 创建实例并指定前缀(如
http://localhost:8080/) - 调用
Start()开始监听 - 用
GetContext()同步等待请求(阻塞,适合简单场景) - 写响应时设置
ContentType和ContentLength64(推荐)
var listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8080/");
listener.Start();
Console.WriteLine("Server running at http://localhost:8080/");
while (true)
{
var context = listener.GetContext();
var response = context.Response;
string html = "
Hello from HttpListener
";byte[] buffer = Encoding.UTF8.GetBytes(html);
response.ContentType = "text/html";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
response.Close(); // 必须关闭
}
支持 GET 参数与路径路由
context.Request.Url 提供完整 URI,可用 PathAndQuery 区分路径和参数,QueryString 属性自动解析键值对。
- 例如访问
http://localhost:8080/api/user?id=123,context.Request.QueryString["id"]返回"123" - 用
switch(context.Request.Url.LocalPath)做简易路由 - 注意 URL 解码:查询字符串值默认已解码,路径部分需手动调用
Uri.UnescapeDataString()
异步处理与多请求支持
GetContext() 是同步阻塞的,一次只能处理一个请求。生产环境建议改用 BeginGetContext / EndGetContext 或更现代的 GetContextAsync()(.NET Core 2.1+ 支持)。
-
GetContextAsync()返回Task,配合await不阻塞主线程 - 每个请求应在独立任务中处理,避免串行延迟
- 记得捕获异常(如客户端断连导致的
IOException),防止整个监听崩溃
async Task HandleRequest(HttpListenerContext ctx)
{
try
{
// 处理逻辑...
}
catch (IOException) { /* 客户端意外断开 */ }
finally { ctx.Response.Close(); }
}
基本上就这些。HttpListener 轻巧可控,适合学习 HTTP 底层交互或构建极简后端;若需路由、中间件、HTTPS、跨平台等能力,建议升级到 ASP.NET Core 的 WebHost 或 Minimal API。









