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 ottenere l'accesso alla raccolta contenente le stringhe che specificano quali prefissi HttpListener URI (Uniform Resource Identifier) 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 in una barra ("/"). 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 le HttpListener richieste di accettazione 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 sono supportati nei prefissi URI gestiti da un HttpListener oggetto . Per specificare un sottodominio con caratteri jolly, usare il carattere "*" come parte del nome host in un prefisso URI. Ad esempio, http://*.foo.com/. Passarlo come argomento al Add metodo .

Avviso

I binding con caratteri jolly di primo livello (http://*:8080/ e http://+:8080) non devono essere usati. poiché possono introdurre vulnerabilità a livello di sicurezza nell'app. Questo concetto vale sia per i caratteri jolly sicuri che vulnerabili. Usare nomi host espliciti al posto di caratteri jolly. L'associazione con caratteri jolly 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). Vedere la sezione 5.4 di RFC7230 per altre informazioni.

Per iniziare ad ascoltare le richieste dai client, aggiungere i prefissi URI alla raccolta e chiamare il Start metodo . HttpListener offre modelli sincroni e asincroni per l'elaborazione delle richieste client. Le richieste e le risposte associate vengono accessibili usando l'oggetto HttpListenerContext restituito dal metodo o dalle GetContext relative controparti asincrone, i BeginGetContext metodi 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 all'utente un HttpListenerContext oggetto per l'elaborazione quando si verifica un oggetto.

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 HttpWebRequest oggetti e HttpWebResponse , ma questi ultimi oggetti non possono essere usati insieme HttpListener a 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 altre informazioni, vedere le Userproprietà , AuthenticationSchemese AuthenticationSchemeSelectorDelegate .

Nota

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

Nota

È 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.

Nota

Se si specificano più schemi di autenticazione per , HttpListeneril listener verifica i client nell'ordine seguente: Negotiate, NTLM, Digeste 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.