2018-02-07

C# URL Encoding (Con't)

前一篇 [1] 提到當使用 URL 傳參數遇到一些特殊字元時,.NET framework 提供了幾種編碼方式都不能完整處理,需要另行寫一段轉換程式,將參數另行處理,甚至需要將 IIS 的 allowDoubleEscaping 打開方能順利執行。

為了避免掙扎於 IIS 安全機制與參數編碼難以兩全的問題,同事幫忙找到在編寫轉換程式時可以使用 HttpServerUtility.UrlTokenEncode() 處理參數;雖然還是得自己寫一段程式,但可以不用更改 IIS 設定。本質上這個編碼接近 Base64 [2],但是因為原始 Base64 仍會生成某些特殊字元 (+, /, =),因此這裡等於是 Base64 的變種。

關於這三個 class 與 .NET framework 版本的關係,稍微整理了一下:
Class Name.NET Framework.NET Core
System.Web.HttpServerUtility1.1N/A
System.Web.HttpUtility1.12.0
System.Uri1.11.0

附帶一提:微軟推出新版的 API Browser,將原先在 MSDN 上的 API 文件改放到 docs.microsoft.com;新版的站台提供較多有關 .NET Core 或 PCL 版本的資訊,但也捨棄了 .NET framework 4.5 以前的資訊,因此查不到各別 class 起源於哪個版本的 .NET framework。

see also:
[1] C# URL Encoding
[2] Wikipedia: Base64
[3] HttpServerUtility: MSDN, docs.microsoft.com
[4] HttpUtility: MSDN, docs.microsoft.com
[5] Uri: MSDN, docs.microsoft.com

沒有留言: