HttpListener HttpListener HttpListener HttpListener Class

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à
HttpListenerHttpListenerHttpListenerHttpListener
Implementazioni

Esempi

Nell'esempio di codice riportato di seguito HttpListenerviene illustrato l'utilizzo di.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 HttpListener classe, è possibile creare un listener di protocollo HTTP semplice 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' HttpListener oggetto 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 HttpListener costruttore e utilizzare la Prefixes proprietà per ottenere l'accesso alla raccolta che include le stringhe che specificano quale Uniform Resource Identifier (URI) prefissi HttpListenerdeve elaborare.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' HttpListener oggetto 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ù HttpListener oggetti non possono aggiungere lo stesso prefisso. Win32Exception viene generata un'eccezione se HttpListener un oggetto 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 HttpListener che 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 HttpListenerda alcun oggetto, 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 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 HttpListener un oggetto.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 Add metodo.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 HttpListenerExceptionoggetto.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/ and 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 Start chiamare il metodo.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListeneroffre 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 effettuato l' HttpListenerContext accesso tramite l'oggetto GetContext restituito dal metodo o dalle relative controparti asincrone BeginGetContext , EndGetContext i metodi e.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 GetContext il metodo, 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 HttpListenerContext oggetto per l'elaborazione quando si verifica.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 BeginGetContext metodo 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, EndGetContext chiamare il metodo 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 HttpListenerContext.Request tramite la proprietà e sono HttpListenerRequest rappresentate da oggetti.In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. Analogamente, è possibile accedere alle HttpListenerContext.Response risposte utilizzando la proprietà e HttpListenerResponse sono rappresentati da oggetti.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Questi oggetti condividono alcune funzionalità con gli HttpWebRequest oggetti HttpWebResponse e, ma questi ultimi non possono HttpListener essere usati insieme a 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 Userproprietà AuthenticationSchemes, e AuthenticationSchemeSelectorDelegate .For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Nota

Se si crea un HttpListener con 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 HttpWebRequest , una query HttpListener di questa operazione 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 HttpListenerper, il listener rileverà i client nell'ordine Negotiateseguente NTLM: Digest,, e Basicquindi.If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.

Costruttori

HttpListener() HttpListener() HttpListener() HttpListener()

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

Proprietà

AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes

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

AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate 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 DefaultServiceNames DefaultServiceNames 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 ExtendedProtectionPolicy ExtendedProtectionPolicy 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 ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate 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 IgnoreWriteExceptions IgnoreWriteExceptions IgnoreWriteExceptions

Ottiene o imposta un valore Boolean che specifica se l'applicazione riceve eccezioni generate quando una classe 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 IsListening IsListening IsListening

Ottiene un valore che indica se la classe HttpListener è stata avviata.Gets a value that indicates whether HttpListener has been started.

IsSupported IsSupported IsSupported IsSupported

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

Prefixes Prefixes Prefixes Prefixes

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

Realm Realm Realm 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 TimeoutManager TimeoutManager TimeoutManager

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

UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication

Ottiene o imposta un valore Boolean che controlla se, quando viene utilizzato NTLM, sono necessarie per l'autenticazione richieste aggiuntive utilizzando la stessa connessione TCP (Transmission Control Protocol).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() Abort() Abort() Abort()

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

BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object)

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

Close() Close() Close() Close()

Chiude HttpListener.Shuts down the HttpListener.

EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) 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) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
GetContext() GetContext() GetContext() GetContext()

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

GetContextAsync() GetContextAsync() GetContextAsync() GetContextAsync()

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
Start() Start() Start() Start()

Consente l'istanza per ricevere le richieste in arrivo.Allows this instance to receive incoming requests.

Stop() Stop() Stop() Stop()

Provoca l'interruzione della ricezione delle richieste in arrivo dell'istanza.Causes this instance to stop receiving incoming requests.

ToString() ToString() ToString() ToString()

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

(Inherited from Object)

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

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

Si applica a

Vedi anche