Elemento <httpListener> (impostazioni di rete)
Personalizza i parametri utilizzati dalla classe HttpListener.
<httpListener
unescapeRequestUrl ="true|false"
/>
Attributi ed elementi
Nelle sezioni seguenti vengono illustrati attributi, elementi figlio e padre.
Attributi
Attribute |
Oggetto di descrizione |
---|---|
unescapeRequestUrl |
Valore booleano che indica se un'istanza HttpListener utilizza l'URI senza codice di escape non elaborato anziché l'URI convertito. |
Elementi figlio
Nessuno.
Elementi padre
Elemento |
Oggetto di descrizione |
---|---|
Configura opzioni di rete di base per lo spazio dei nomi System.Net. |
Note
L'attributo [indicaseT:System.Net.HttpListener] utilizza l'URI senza codice di escape non elaborato anziché l'URI convertito laddove vengono convertiti i valori con codifica in percentuale e vengono eseguiti altri passaggi della normalizzazione.
Quando un'istanza HttpListener riceve una richiesta tramite il servizio http.sys, crea un'istanza della stringa URI fornita da http.sys e l'espone come proprietà HttpListenerRequest.Url.
Il servizio http.sys espone due stringhe URI di richiesta:
URI non elaborato
URI convertito
L'URI non elaborato è rappresentato dall'oggetto System.Uri fornito nella riga di richiesta di una richiesta HTTP:
GET /path/
Host: www.contoso.com
L'URI non elaborato fornito da http.sys per la richiesta sopra indicata è "/path/." Questo rappresenta la stringa che segue il verbo HTTP come è inviato sulla rete.
Il servizio http.sys crea un URI convertito partendo dalle informazioni disponibili nella richiesta tramite l'URI presente nella riga della richiesta HTTP e nell'intestazione Host allo scopo di determinare il server di origine a cui la richiesta deve essere inoltrata. Questa operazione viene eseguita confrontando le informazioni dalla richiesta con un set di prefissi URI registrati. La documentazione SDK del server HTTP si riferisce a questo URI convertito come la struttura HTTP_COOKED_URL.
Per essere in grado di confrontare la richiesta con i prefissi URI registrati, è necessario effettuare alcune normalizzazioni della richiesta. Nell'esempio precedente l'URI convertito sarebbe:
Il servizio http.sys combina il valore della proprietà Uri.Host e la stringa della riga della richiesta in moda da creare un URI convertito. Inoltre, http.sys e la classe System.Uri esegue anche quanto di seguito descritto:
Non effettua l'escape di tutte le percentuali dei valori codificati.
Converte caratteri non ASCII con codifica in percentuale in una rappresentazione UTF-16 del carattere. Notare che sono supportati i caratteri UTF-8, ANSI/DBCS e Unicode (codifica Unicode tramite il formato %uXXXX).
Esegue gli altri passaggi della normalizzazione, come la compressione del percorso.
Poiché la richiesta non contiene alcuna informazione sulla codifica utilizzata per i valori con codifica in percentuale, potrebbe non essere possibile determinare la codifica corretta unicamente tramite l'analisi dei valori con codifica in percentuale.
Pertanto http.sys fornisce due chiavi del Registro di sistema per la modifica del processo:
Chiave del Registro di sistema |
Valore predefinito |
Oggetto di descrizione |
---|---|---|
EnableNonUTF8 |
1 |
Se è zero, http.sys accetta solo URL con codifica UTF-8. Se diverso da zero, http.sys accetta anche URL con codifica ANSI o DBCS nelle richieste. |
FavorUTF8 |
1 |
Se diverso da zero, http.sys tenta sempre di decodificare prima un URL come UTF-8; se quella conversione non riesce e se EnableNonUTF8 è diverso da zero, Http.sys tenta quindi di decodificarlo come ANSI o DBCS. Se è zero (e EnableNonUTF8 è diverso da zero), http.sys tenta di decodificarlo come ANSI o DBCS; se non vi riesce, prova a convertirlo in UTF-8. |
Quando HttpListener riceve una richiesta, utilizza l'URI convertito da http.sys come input alla proprietà Url.
Occorre inoltre supportare caratteri oltre ai caratteri e numeri in URI. Un esempio è dato dal seguente URI, utilizzato per recuperare informazioni sul cliente in base al numero cliente "1/3812":
https://www.contoso.com/Customer('1%2F3812')/
Notare la barra con codifica in percentuale nell'Uri (%2F). Questo è necessario poiché in questo caso il carattere della barra rappresenta dati e non un delimitatore del percorso.
Il passaggio della stringa al costruttore Uri produrrà il seguente URI:
https://www.contoso.com/Customer('1/3812')/
La suddivisione del percorso nei relativi segmenti darebbe origine agli elementi seguenti:
Customer('1
3812')
Questo non è l'intento del mittente della richiesta.
Se l'attributo unescapeRequestUrl è impostato su false, quando [T:System.Net.HttpListenerriceveunarichiesta,utilizzal'URInonelaboratoanzichél'URIconvertitoda]http.sys come input per la proprietà Url.
Il valore predefinito per l'attributo unescapeRequestUrl è true.
La proprietà UnescapeRequestUrl può essere utilizzata per ottenere il valore corrente dell'attributo unescapeRequestUrl dai file di configurazione applicabili.
Esempio
Nell'esempio di codice seguente viene mostrato come configurare la classe HttpListener quando riceve una richiesta per utilizzare l'URI non elaborato anziché l'URI convertito da http.sys come input alla proprietà Url.
<configuration>
<system.net>
<settings>
<httpListener
unescapeRequestUrl="false"
/>
</settings>
</system.net>
</configuration>
Informazioni sull'elemento
Spazio dei nomi |
System.Net |
Nome di schema |
|
File di convalida |
|
Può essere vuoto |