HttpListener Classe

Definizione

Fornisce un listener semplice del protocollo HTTP controllato a livello di codice.Provides a simple, programmatically controlled HTTP protocol listener. Questa classe non può essere ereditata.This class cannot be inherited.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Ereditarietà
HttpListener
Implementazioni

Esempi

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di un HttpListener.The following code example demonstrates using a HttpListener.

// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string[] prefixes)
{
    if (!HttpListener.IsSupported)
    {
        Console.WriteLine ("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
        return;
    }
    // URI prefixes are required,
    // for example "http://contoso.com:8080/index/".
    if (prefixes == null || prefixes.Length == 0)
      throw new ArgumentException("prefixes");
    
    // Create a listener.
    HttpListener listener = new HttpListener();
    // Add the prefixes.
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request. 
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer,0,buffer.Length);
    // You must close the output stream.
    output.Close();
    listener.Stop();
}
Public Shared Sub SimpleListenerExample(prefixes As String())
    If Not HttpListener.IsSupported Then
        Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
        Return
    End If
    ' URI prefixes are required,
    ' for example "http://contoso.com:8080/index/".
    If prefixes Is Nothing Or prefixes.Length = 0 Then
        Throw New ArgumentException("prefixes")
    End If

    ' Create a listener
    Dim listener = New HttpListener()

    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next
    listener.Start()
    Console.WriteLine("Listening...")
    ' Note: The GetContext method blocks while waiting for a request.
    Dim context As HttpListenerContext = listener.GetContext()
    Console.WriteLine("Listening...")
    ' Obtain a response object
    Dim request As HttpListenerRequest = context.Request
    ' Construct a response.
    Dim response As HttpListenerResponse = context.Response
    Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    ' Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length
    Dim output As System.IO.Stream = response.OutputStream
    output.Write(buffer, 0, buffer.Length)
    'You must close the output stream.
    output.Close()
    listener.Stop()
End Sub

Commenti

Utilizzando la classe HttpListener, è possibile creare un semplice listener del protocollo HTTP che risponde alle richieste HTTP.Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. Il listener è attivo per la durata dell'oggetto HttpListener e viene eseguito all'interno dell'applicazione con le relative autorizzazioni.The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

Per utilizzare HttpListener, creare una nuova istanza della classe utilizzando il costruttore di HttpListener e utilizzare la proprietà Prefixes per accedere alla raccolta che include le stringhe che specificano i prefissi di Uniform Resource Identifier (URI) che devono essere elaborati dall'HttpListener.To use HttpListener, create a new instance of the class using the HttpListener constructor and use the Prefixes property to gain access to the collection that holds the strings that specify which Uniform Resource Identifier (URI) prefixes the HttpListener should process.

Una stringa di prefisso URI è costituita da uno schema (http o HTTPS), da un host, da una porta facoltativa e da un percorso facoltativo.A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. Un esempio di stringa di prefisso completa è http://www.contoso.com:8080/customerData/.An example of a complete prefix string is http://www.contoso.com:8080/customerData/. I prefissi devono terminare con una barra ("/").Prefixes must end in a forward slash ("/"). L'oggetto HttpListener con il prefisso che corrisponde maggiormente a un URI richiesto risponde alla richiesta.The HttpListener object with the prefix that most closely matches a requested URI responds to the request. Più oggetti HttpListener non possono aggiungere lo stesso prefisso. viene generata un'eccezione Win32Exception se una HttpListener aggiunge un prefisso già in uso.Multiple HttpListener objects cannot add the same prefix; a Win32Exception exception is thrown if a HttpListener adds a prefix that is already in use.

Quando si specifica una porta, l'elemento host può essere sostituito con "*" per indicare che l'HttpListener accetta le richieste inviate alla porta se l'URI richiesto non corrisponde ad alcun altro prefisso.When a port is specified, the host element can be replaced with "*" to indicate that the HttpListener accepts requests sent to the port if the requested URI does not match any other prefix. Per ricevere, ad esempio, tutte le richieste inviate alla porta 8080 quando l'URI richiesto non è gestito da alcun HttpListener, il prefisso è http://*: 8080/.For example, to receive all requests sent to port 8080 when the requested URI is not handled by any HttpListener, the prefix is http://*:8080/. Analogamente, per specificare che il HttpListener accetta tutte le richieste inviate a una porta, sostituire l'elemento host con il carattere "+".Similarly, to specify that the HttpListener accepts all requests sent to a port, replace the host element with the "+" character. Ad esempio: https://+:8080.For example, https://+:8080. I caratteri "*" e "+" possono essere presenti nei prefissi che includono i percorsi.The "*" and "+" characters can be present in prefixes that include paths.

A partire da .NET Core 2,0 o .NET Framework 4,6 in Windows 10, i sottodomini con caratteri jolly sono supportati nei prefissi URI gestiti da un oggetto HttpListener.Starting with .NET Core 2.0 or .NET Framework 4.6 on Windows 10, wildcard subdomains are supported in URI prefixes that are managed by an HttpListener object. Per specificare un sottodominio con caratteri jolly, usare il carattere "*" come parte del nome host in un prefisso URI.To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. Ad esempio, http://*. foo.com/.For example, http://*.foo.com/. Passare come argomento al metodo Add.Pass this as the argument to the Add method. Funziona a partire da .NET Core 2,0 o .NET Framework 4,6 in Windows 10; nelle versioni precedenti, viene generato un HttpListenerException.This works as of .NET Core 2.0 or .NET Framework 4.6 on Windows 10; in earlier versions, this generates an HttpListenerException.

Avviso

Le associazioni con caratteri jolly di primo livello (http://*: 8080/ e http://+:8080) non devono essere usate.Top-level wildcard bindings (http://*:8080/ and http://+:8080) should not be used. poiché possono introdurre vulnerabilità a livello di sicurezza nell'app.Top-level wildcard bindings can open up your app to security vulnerabilities. Questo concetto vale sia per i caratteri jolly sicuri che vulnerabili.This applies to both strong and weak wildcards. Usare nomi host espliciti al posto di caratteri jolly.Use explicit host names rather than wildcards. 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).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Vedere la sezione 5.4 di RFC7230 per altre informazioni.See rfc7230 section-5.4 for more information.

Per iniziare l'ascolto delle richieste provenienti dai client, aggiungere i prefissi URI alla raccolta e chiamare il metodo Start.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListener offre modelli sincroni e asincroni per l'elaborazione delle richieste client.HttpListener offers both synchronous and asynchronous models for processing client requests. Alle richieste e alle risposte associate viene eseguito l'accesso tramite il HttpListenerContext oggetto restituito dal metodo GetContext o dalle relative controparti asincrone, i metodi BeginGetContext e EndGetContext.Requests and their associated responses are accessed using the HttpListenerContext object returned by the GetContext method or its asynchronous counterparts, the BeginGetContext and EndGetContext methods.

Il modello sincrono è appropriato se l'applicazione deve essere bloccata in attesa di una richiesta client e se si desidera elaborare solo una richiesta alla volta.The synchronous model is appropriate if your application should block while waiting for a client request and if you want to process only one request at a time. Utilizzando il modello sincrono, chiamare il metodo GetContext, che attende che un client invii una richiesta.Using the synchronous model, call the GetContext method, which waits for a client to send a request. Il metodo restituisce un oggetto HttpListenerContext per l'elaborazione quando si verifica una situazione.The method returns an HttpListenerContext object to you for processing when one occurs.

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.In the more complex asynchronous model, your application does not block while waiting for requests and each request is processed in its own execution thread. Usare il metodo BeginGetContext per specificare un metodo definito dall'applicazione da chiamare per ogni richiesta in ingresso.Use the BeginGetContext method to specify an application-defined method to be called for each incoming request. All'interno di questo metodo, chiamare il metodo EndGetContext per ottenere la richiesta, elaborarla e rispondere.Within that method, call the EndGetContext method to obtain the request, process it, and respond.

In entrambi i modelli, le richieste in ingresso sono accessibili tramite la proprietà HttpListenerContext.Request e sono rappresentate da oggetti HttpListenerRequest.In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. Analogamente, è possibile accedere alle risposte utilizzando la proprietà HttpListenerContext.Response e sono rappresentati da HttpListenerResponse oggetti.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Questi oggetti condividono alcune funzionalità con gli oggetti HttpWebRequest e HttpWebResponse, ma questi ultimi non possono essere usati insieme a HttpListener perché implementano i comportamenti del client, non del server.These objects share some functionality with the HttpWebRequest and HttpWebResponse objects, but the latter objects cannot be used in conjunction with HttpListener because they implement client, not server, behaviors.

Un HttpListener può richiedere l'autenticazione client.An HttpListener can require client authentication. È possibile specificare un particolare schema da utilizzare per l'autenticazione oppure specificare un delegato che determini lo schema da utilizzare.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. Per ottenere informazioni sull'identità del client, è necessario disporre di una qualche forma di autenticazione.You must require some form of authentication to obtain information about the client's identity. Per ulteriori informazioni, vedere le proprietà User, AuthenticationSchemese AuthenticationSchemeSelectorDelegate.For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Nota

Se si crea un HttpListener usando HTTPS, è necessario selezionare un certificato del server per il listener.If you create an HttpListener using https, you must select a Server Certificate for that listener. In caso contrario, una query HttpWebRequest di questo HttpListener avrà esito negativo con una chiusura imprevista della connessione.Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

Nota

È possibile configurare i certificati del server e altre opzioni del listener usando la shell di rete (netsh. exe).You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). Per ulteriori informazioni, vedere la pagina relativa alla Shell di rete (netsh) .See Network Shell (Netsh) for more details. Il file eseguibile ha iniziato a distribuire con Windows Server 2008 e Windows Vista.The executable began shipping with Windows Server 2008 and Windows Vista.

Nota

Se si specificano più schemi di autenticazione per la HttpListener, il listener rileverà i client nell'ordine seguente: Negotiate, NTLM, Digeste quindi Basic.If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.

HTTP.sysHTTP.sys

La classe HttpListener si basa su HTTP.sys, ovvero sul listener in modalità kernel che gestisce tutto il traffico HTTP per Windows.The HttpListener class is built on top of HTTP.sys, which is the kernel mode listener that handles all HTTP traffic for Windows. HTTP.sys fornisce la gestione della connessione, la limitazione della larghezza di banda e la registrazione del server Web.HTTP.sys provides connection management, bandwidth throttling, and web server logging. Utilizzare lo strumento HttpCfg. exe per aggiungere certificati SSL.Use the HttpCfg.exe tool to add SSL certificates.

Costruttori

HttpListener()

Inizializza una nuova istanza della classe HttpListener.Initializes a new instance of the HttpListener class.

Proprietà

AuthenticationSchemes

Ottiene o imposta lo schema usato per autenticare i client.Gets or sets the scheme used to authenticate clients.

AuthenticationSchemeSelectorDelegate

Ottiene o imposta il delegato chiamato per determinare il protocollo utilizzato per autenticare i client.Gets or sets the delegate called to determine the protocol used to authenticate clients.

DefaultServiceNames

Ottiene un elenco predefinito di nomi di provider di servizi come determinato dai prefissi registrati.Gets a default list of Service Provider Names (SPNs) as determined by registered prefixes.

ExtendedProtectionPolicy

Ottiene o imposta l'oggetto ExtendedProtectionPolicy da usare per la protezione estesa di una sessione.Gets or sets the ExtendedProtectionPolicy to use for extended protection for a session.

ExtendedProtectionSelectorDelegate

Ottiene o imposta il delegato chiamato per determinare l'oggetto ExtendedProtectionPolicy da usare per ogni richiesta.Gets or sets the delegate called to determine the ExtendedProtectionPolicy to use for each request.

IgnoreWriteExceptions

Ottiene o imposta un valore Boolean che specifica se l'applicazione riceve le eccezioni che si verificano quando un oggetto HttpListener invia la risposta al client.Gets or sets a Boolean value that specifies whether your application receives exceptions that occur when an HttpListener sends the response to the client.

IsListening

Ottiene un valore che indica se l'oggetto HttpListener è stato avviato.Gets a value that indicates whether HttpListener has been started.

IsSupported

Ottiene un valore che indica se l'oggetto HttpListener può essere usato con il sistema operativo corrente.Gets a value that indicates whether HttpListener can be used with the current operating system.

Prefixes

Ottiene i prefissi URI (Uniform Resource Identifier) gestiti dall'oggetto HttpListener.Gets the Uniform Resource Identifier (URI) prefixes handled by this HttpListener object.

Realm

Ottiene o imposta l'area o partizione di risorsa associata all'oggetto HttpListener.Gets or sets the realm, or resource partition, associated with this HttpListener object.

TimeoutManager

Gestore di timeout per questa istanza di HttpListener.The timeout manager for this HttpListener instance.

UnsafeConnectionNtlmAuthentication

Ottiene o imposta un valore Boolean che controlla se è necessario autenticare altre richieste che usano la stessa connessione TCP (Transmission Control Protocol), quando viene usato NTLM.Gets or sets a Boolean value that controls whether, when NTLM is used, additional requests using the same Transmission Control Protocol (TCP) connection are required to authenticate.

Metodi

Abort()

Arresta immediatamente l'oggetto HttpListener annullando tutte le richieste correntemente accodate.Shuts down the HttpListener object immediately, discarding all currently queued requests.

BeginGetContext(AsyncCallback, Object)

Avvia il recupero in modo asincrono di una richiesta in arrivo.Begins asynchronously retrieving an incoming request.

Close()

Chiude HttpListener.Shuts down the HttpListener.

EndGetContext(IAsyncResult)

Completa un'operazione asincrona per recuperare una richiesta del client in arrivo.Completes an asynchronous operation to retrieve an incoming client request.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetContext()

Attende una richiesta in arrivo e ne restituisce una alla ricezione.Waits for an incoming request and returns when one is received.

GetContextAsync()

Attende una richiesta in ingresso come operazione asincrona.Waits for an incoming request as an asynchronous operation.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
Start()

Consente a questa istanza di ricevere le richieste in ingresso.Allows this instance to receive incoming requests.

Stop()

Comporta l'interruzione della ricezione delle richieste in ingresso per questa istanza.Causes this instance to stop receiving incoming requests.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Rilascia le risorse contenute nell'oggetto HttpListener.Releases the resources held by this HttpListener object.

Si applica a

Vedi anche