<httpListener> 元素 (網路設定)
自訂 HttpListener 類別所使用的參數。
<configuration>
<system.net>
<settings>
<httpListener>
Syntax
<httpListener
unescapeRequestUrl="true|false"
/>
類型
屬性和項目
下列章節說明屬性、子元素和父元素。
屬性
屬性 | 描述 |
---|---|
unescapeRequestUrl | 布林值,指出 HttpListener 執行個體是否使用原始未逸出的 URI,而非轉換的 URI。 |
子元素
無。
父項目
Element | 說明 |
---|---|
設定 | 為 System.Net 命名空間設定基本的網路選項。 |
備註
unescapeRequestUrl 屬性會指出 HttpListener 是否使用原始未逸出的 URI,而非轉換的 URI,後者會轉換任何百分比編碼值,並採取其他正規化步驟。
當 HttpListener 執行個體透過 http.sys
服務收到要求時,即會建立 http.sys
所提供的 URI 字串執行個體,並將其公開為 HttpListenerRequest.Url 屬性。
http.sys
服務會公開兩個要求 URI 字串:
原始 URI
轉換的 URI
原始 URI 是 HTTP 要求之要求行中提供的 System.Uri:
GET /path/
Host: www.contoso.com
http.sys
針對上述要求所提供的原始 URI 為 "/path/"。 這表示字串後面會接著 HTTP 動詞命令,因為這是透過網路傳送。
http.sys
服務會使用 HTTP 要求行中提供的 URI 和主機標頭來判斷應轉送要求的目標原始伺服器,以從要求中提供的資訊建立轉換的 URI。 這可藉由比較來自要求的資訊與一組已註冊的 URI 首碼來完成。 HTTP 伺服器 SDK 文件將這個轉換的 URI 稱為 HTTP_COOKED_URL 結構。
若要能夠比較要求與已註冊的 URI 首碼,需要對要求進行一些正規化。 在上述範例中,轉換的 URI 如下所示:
http://www.contoso.com/path/
http.sys
服務會結合 Uri.Host 屬性值與要求行中的字串,建立轉換的 URI。 此外,http.sys
和 System.Uri 類別還會執行下列作業:
取消逸出所有百分比編碼值。
將百分比編碼的非 ASCII 字元轉換成 UTF-16 字元表示。 請注意,支援 UTF-8 和 ANSI/DBCS 字元,以及 Unicode 字元 (使用 %uXXXX 格式的 Unicode 編碼方式)。
執行其他正規化步驟,例如路徑壓縮。
由於要求不包含百分比編碼值所用編碼方式的任何資訊,只是剖析百分比編碼值,可能無法判斷正確的編碼方式。
因此,http.sys
提供兩個登錄機碼來修改此流程:
登錄金鑰 | 預設值 | 描述 |
---|---|---|
EnableNonUTF8 | 1 | 如果為零,http.sys 只會接受 UTF-8 編碼的 URL。如果為非零, http.sys 也會接受要求中 ANSI 或 DBCS 編碼的 URL。 |
FavorUTF8 | 1 | 如果為非零,http.sys 一律會先嘗試將 URL 解碼為 UTF-8;如果該轉換失敗且 EnableNonUTF8 為非零,Http.sys 會接著嘗試將其解碼為 ANSI 或 DBCS。如果為零 (且 EnableNonUTF8 為非零), http.sys 會嘗試將其解碼為 ANSI 或 DBCS;如果失敗,則會嘗試進行 UTF-8 轉換。 |
當 HttpListener 收到要求時,即會使用從 http.sys
轉換的 URI 作為 Url 屬性的輸入。
除了 URI 中的字元和數字之外,還需要支援字元。 例如,下列 URI 可用來擷取客戶編號 "1/3812" 的客戶資訊:
http://www.contoso.com/Customer('1%2F3812')/
請注意 Uri (%2F) 中的百分比編碼斜線。 這是必要的,因為在此情況下,斜線字元代表資料,而不是路徑分隔符號。
將字串傳遞至 URI 建構函式會導致下列 URI:
http://www.contoso.com/Customer('1/3812')/
將路徑分段會產生下列元素:
Customer('1
3812')
這不是要求傳送者想要的。
如果 unescapeRequestUrl 屬性設定為 false,則當 HttpListener 收到要求時,就會使用原始 URI,而不是使用從 http.sys
轉換的 URI 作為 Url 屬性的輸入。
unescapeRequestUrl 屬性的預設值為 true。
UnescapeRequestUrl 屬性可用來從適用的組態檔取得 unescapeRequestUrl 屬性的目前值。
範例
下列範例示範如何設定 HttpListener 類別在收到要求時使用原始 URI,而不是使用從 http.sys
轉換的 URI 作為 Url 屬性的輸入。
<configuration>
<system.net>
<settings>
<httpListener
unescapeRequestUrl="false"
/>
</settings>
</system.net>
</configuration>
項目資訊
命名空間:System.Net