Server.UrlEncode 和 HttpUtility.UrlDecode 是 .NET 中用于處理 URL 編碼/解碼的兩個不同方法,主要區別在于所屬命名空間、使用場景和具體行為。以下是詳細對比:
1. 所屬類庫與命名空間
Server.UrlEncode
- 屬于 System.Web.HttpServerUtility 類。
- 通常通過 HttpContext.Current.Server(ASP.NET Web Forms)或
Page.Server(ASP.NET 頁面)訪問。 - 命名空間: System.Web
- 適用場景: 傳統 ASP.NET Web Forms 或經典 ASP.NET 應用程序。
HttpUtility.UrlDecode
- 屬于 System.Web.HttpUtility 類。
- 是一個靜態工具方法,可直接調用(如 HttpUtility.UrlDecode(string))。
- 命名空間: System.Web
- 適用場景: 更通用的 URL 解碼,適用于 ASP.NET Web Forms、MVC、.NET Core(需通過兼容包)等。
2. 功能方向
Server.UrlEncode
- 功能: 對字符串進行 URL 編碼(將特殊字符轉換為 %XX 格式)。
- 示例:
string encoded = Server.UrlEncode("Hello World&"); // 輸出 "Hello%20World%26"
HttpUtility.UrlDecode
- 功能: 對已編碼的 URL 字符串進行 解碼(將 %XX 還原為原始字符)。
- 示例:
string decoded = HttpUtility.UrlDecode("Hello%20World%26"); // 輸出 "Hello World&"
3. 注意事項
.NET Core/5+ 的變化
-
Server.UrlEncode 和 HttpUtility 在 .NET Core 中不再默認包含,需通過 System.Web 兼容包或改用 WebUtility 類(位于 System.Net 命名空間)。
-
推薦在新項目中使用 WebUtility.UrlEncode 和 WebUtility.UrlDecode。
編碼/解碼的互補性
- 編碼和解碼通常是成對使用的。例如:
string original = "data&";
string encoded = HttpUtility.UrlEncode(original); // 編碼
string decoded = HttpUtility.UrlDecode(encoded); // 解碼回原始值
4. 代碼示例對比
// ASP.NET Web Forms 中使用 Server.UrlEncode
string safeParam = Server.UrlEncode("name=John Doe");
Response.Redirect($"Page.aspx?{safeParam}");// 通用場景中使用 HttpUtility.UrlDecode
string encodedParam = Request.QueryString["param"];
string originalParam = HttpUtility.UrlDecode(encodedParam);
總結
- Server.UrlEncode:用于編碼,依賴 HttpServerUtility,適合傳統 ASP.NET。
- HttpUtility.UrlDecode:用于解碼,靜態方法,適用性更廣。
- 現代替代方案:在 .NET Core/5+ 中優先使用 WebUtility 類。
根據項目類型選擇合適的方法,并注意平臺兼容性。