首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 使用 HttpListener 實現 HTTP 請求攔截與處理

     編輯:ASP.NET 基礎

前言

本文介紹一個簡潔的 ASP.NET 實作,利用 HttpListener 類別建立一個輕量級的 HTTP 伺服器,能夠攔截傳入的 HTTP 請求並進行自訂處理。這段代碼雖然簡短,卻展示了非同步 I/O 的核心模式,適合作為學習網路程式設計的切入點,或是作為簡單的 Mock Server、Webhook 接收端等場景的基礎框架。

核心代碼實作

public class HttpServer : IDisposable
{
    private HttpListener _listener;

    public void Start()
    {
        _listener = new HttpListener();
        _listener.Prefixes.Add("https://localhost/");
        _listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication 
                                        | AuthenticationSchemes.Anonymous;
        _listener.Start();
        _listener.BeginGetContext(GetContextCallback, null);
    }

    private void GetContextCallback(IAsyncResult ar)
    {
        HttpListenerRequest request;
        HttpListenerResponse response;

        try
        {
            var context = _listener.EndGetContext(ar);
            request = context.Request;
            response = context.Response;

            // 立即開始下一輪監聽,實現併發處理
            _listener.BeginGetContext(GetContextCallback, null);
        }
        catch (InvalidOperationException)
        {
            return; // 監聽器已停止
        }
        catch (HttpListenerException)
        {
            return; // 底層網路錯誤
        }

        try
        {
            using (var writer = new StreamWriter(response.OutputStream))
            {
                writer.Write(@"

你的請求已經被截取

"); writer.Flush(); } } finally { response.OutputStream.Flush(); response.Close(); } } public void Dispose() { _listener?.Stop(); } }

關鍵技術點解析

1. HttpListener 基礎

HttpListener 是 .NET Framework 內建的 HTTP 協議監聽器,無需 IIS 即可直接處理 HTTP 請求。透過 Prefixes 集合註冊 URL 前綴(需管理員權限或預留 URL),支援 Windows 整合驗證與匿名驗證並存。

2. 非同步模式:BeginGetContext / EndGetContext

代碼採用 APM(Asynchronous Programming Model)模式:

  • BeginGetContext 發起非同步等待,不阻塞執行緒
  • 請求到達時觸發回調 GetContextCallback
  • 回調內 優先重新啟動監聽(BeginGetContext),確保下一個請求能立即被接收,這是高併發的關鍵
  • 再處理當前請求的業務邏輯

3. 異常處理與資源釋放

捕獲 InvalidOperationException(監聽器已停止)與 HttpListenerException(網路層錯誤),避免未處理異常導致進程崩潰。實作 IDisposable 確保資源正確釋放。

應用場景與延伸

  • 開發測試:快速建立 Mock API 服務,模擬第三方回調
  • Webhook 接收:接收 GitHub、支付網關等外部服務的通知
  • 請求檢測/記錄:分析 HTTP Header、Body 內容,做安全審計或除錯
  • 嵌入式場景:WinForms/WPF 應用內嵌輕量 HTTP 介面

改進建議

  • 支援 HTTPS(需憑證綁定)
  • 加入路由機制,依路徑/方法分派處理器
  • 整合依賴注入,支援更複雜的業務邏輯
  • 使用 async/await 重寫(.NET 4.5+),代碼更易讀

這個極簡實作雖然功能有限,但展現了 .NET 底層網路程式設計的精髓,是理解 Kestrel、ASP.NET Core 管線等高階框架的良好起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved