Condividi tramite


Classe System.Net.HttpListener

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Usando la HttpListener classe , è possibile creare un semplice listener del protocollo HTTP che risponde alle richieste HTTP. Il listener è attivo per la durata dell'oggetto HttpListener e viene eseguito all'interno dell'applicazione con le relative autorizzazioni.

Per usare HttpListener, creare una nuova istanza della classe usando il HttpListener costruttore e usare la Prefixes proprietà per accedere alla raccolta che contiene le stringhe che specificano quali prefissi URI HttpListener devono elaborare.

Una stringa di prefisso URI è costituita da uno schema (http o https), un host, una porta facoltativa e un percorso facoltativo. Un esempio di stringa di prefisso completa è http://www.contoso.com:8080/customerData/. I prefissi devono terminare con una barra obliqua ("/"). L'oggetto HttpListener con il prefisso più simile a un URI richiesto risponde alla richiesta. Più HttpListener oggetti non possono aggiungere lo stesso prefisso. Se Win32Exception un HttpListener oggetto aggiunge un prefisso già in uso, viene generata un'eccezione.

Quando si specifica una porta, l'elemento host può essere sostituito con "*" per indicare che HttpListener accetta richieste inviate alla porta se l'URI richiesto non corrisponde ad alcun altro prefisso. Ad esempio, per ricevere tutte le richieste inviate alla porta 8080 quando l'URI richiesto non viene gestito da alcun HttpListener, il prefisso è http://*:8080/. Analogamente, per specificare che HttpListener accetta tutte le richieste inviate a una porta, sostituire l'elemento host con il carattere "+". Ad esempio: https://+:8080. I caratteri "*" e "+" possono essere presenti nei prefissi che includono percorsi.

I sottodomini con caratteri jolly nei prefissi URI sono supportati e gestiti da un oggetto HttpListener. Per specificare un sottodominio wildcard, usare il carattere "*" come parte del nome host in un prefisso URI. Ad esempio, http://*.foo.com/. Passarlo come argomento al metodo Add.

Avvertimento

I binding con caratteri jolly di primo livello (http://*:8080/ e http://+:8080) non andrebbero usati. Gli associazioni jolly di alto livello possono introdurre vulnerabilità di sicurezza nell'app. Questo concetto vale sia per i caratteri jolly sicuri che vulnerabili. Usare nomi host espliciti al posto di caratteri universali. L'associazione wildcard del sottodominio (ad esempio, *.mysub.com) non costituisce un rischio per la sicurezza se viene controllato l'intero dominio padre (a differenza di *.com, che è vulnerabile). Per altre informazioni, vedere la sezione rfc7230-5.4 .

Per iniziare ad ascoltare le richieste dai client, aggiungere i prefissi URI alla raccolta e chiamare il metodo Start. HttpListener offre modelli sincroni e asincroni per l'elaborazione delle richieste client. Le richieste e le loro risposte associate sono accessibili usando l'oggetto HttpListenerContext restituito dal metodo GetContext o dalle sue relative controparti asincrone, i metodi BeginGetContext e EndGetContext.

Il modello sincrono è appropriato se l'applicazione deve bloccarsi durante l'attesa di una richiesta client e se si vuole elaborare una sola richiesta alla volta. Usando il modello sincrono, chiamare il GetContext metodo , che attende che un client invii una richiesta. Il metodo restituisce a voi un oggetto HttpListenerContext per l'elaborazione quando si verifica un evento.

Nel modello asincrono più complesso, l'applicazione non si blocca durante l'attesa delle richieste e ogni richiesta viene elaborata nel proprio thread di esecuzione. Usare il BeginGetContext metodo per specificare un metodo definito dall'applicazione da chiamare per ogni richiesta in ingresso. All'interno di tale metodo chiamare il EndGetContext metodo per ottenere la richiesta, elaborarla e rispondere.

In entrambi i modelli, le richieste in ingresso sono accessibili usando la HttpListenerContext.Request proprietà e sono rappresentate da HttpListenerRequest oggetti . Analogamente, le risposte vengono accessibili usando la HttpListenerContext.Response proprietà e sono rappresentate da HttpListenerResponse oggetti . Questi oggetti condividono alcune funzionalità con gli oggetti HttpWebRequest e HttpWebResponse, ma questi ultimi non possono essere usati insieme a HttpListener perché implementano comportamenti client, non server.

Un HttpListener può richiedere l'autenticazione client. È possibile specificare uno schema specifico da usare per l'autenticazione oppure specificare un delegato che determina lo schema da usare. È necessario richiedere una forma di autenticazione per ottenere informazioni sull'identità del client. Per ulteriori informazioni, vedere le User proprietà, AuthenticationSchemes e AuthenticationSchemeSelectorDelegate.

Annotazioni

Se si crea un oggetto HttpListener usando https, è necessario selezionare un certificato server per tale listener. In caso contrario, le richieste a questo HttpListener avranno esito negativo con una chiusura imprevista della connessione.

Annotazioni

È possibile configurare i certificati del server e altre opzioni del listener usando Network Shell (netsh.exe). Per altri dettagli, vedere Network Shell (Netsh). Il file eseguibile ha iniziato la spedizione con Windows Server 2008 e Windows Vista.

Annotazioni

Se si specificano più schemi di autenticazione per il HttpListener, il listener verificherà i client nel seguente ordine: Negotiate, NTLM, Digest, e quindi Basic.

HTTP.sys

La HttpListener classe è basata su HTTP.sys, che è il listener in modalità kernel che gestisce tutto il traffico HTTP per Windows. HTTP.sys fornisce la gestione delle connessioni, la limitazione della larghezza di banda e la registrazione del server Web. Usare lo strumento HttpCfg.exe per aggiungere certificati SSL.