Condividi tramite


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

<settings>

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:

https://www.contoso.com/path/

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

Vedere anche

Riferimenti

Schema delle impostazioni di rete

HttpListenerElement

HttpListener

Url