Funzionalità di richiesta in ASP.NET Core
Di Steve Smith
L'API HttpContext
usata dalle applicazioni e dal middleware per elaborare le richieste ha un livello di astrazione sottostante denominato interfacce di funzionalità. Ogni interfaccia di funzionalità fornisce un subset granulare delle funzionalità esposte da HttpContext
. Queste interfacce possono essere aggiunte, modificate, incapsulate, sostituite o anche rimosse dal server o dal middleware durante l'elaborazione della richiesta senza dover implementare nuovamente l'intero HttpContext
oggetto . Possono anche essere usati per simulare funzionalità durante i test.
Raccolte di funzionalità
La Features proprietà di HttpContext
fornisce l'accesso alla raccolta di interfacce di funzionalità per la richiesta corrente. Poiché l'insieme di funzionalità è modificabile anche all'interno del contesto di una richiesta, è possibile usare il middleware per modificare la raccolta e aggiungere il supporto di altre funzionalità. Alcune funzionalità avanzate sono disponibili solo accedendo all'interfaccia associata tramite la raccolta di funzionalità.
Interfacce di funzionalità
ASP.NET Core definisce una serie di interfacce di funzionalità HTTP comuni in Microsoft.AspNetCore.Http.Features, condivise da vari server e middleware per identificare le funzionalità supportate. I server e il middleware possono anche fornire interfacce personalizzate con funzionalità aggiuntive.
La maggior parte delle interfacce di funzionalità fornisce funzionalità facoltative, leggere e le API associate HttpContext
forniscono le impostazioni predefinite se la funzionalità non è presente. Alcune interfacce sono indicate nel contenuto seguente come richiesto perché forniscono funzionalità di richiesta e risposta di base e devono essere implementate per elaborare la richiesta.
Le interfacce di funzionalità seguenti provengono da Microsoft.AspNetCore.Http.Features:
IHttpRequestFeature: definisce la struttura di una richiesta HTTP, inclusi il protocollo, il percorso, la stringa di query, le intestazioni e il corpo. Questa funzionalità è necessaria per elaborare le richieste.
IHttpResponseFeature: definisce la struttura di una risposta HTTP, inclusi il codice di stato, le intestazioni e il corpo della risposta. Questa funzionalità è necessaria per elaborare le richieste.
IHttpResponseBodyFeature: definisce modi diversi per scrivere il corpo della risposta, usando un Stream
oggetto , o PipeWriter
un file. Questa funzionalità è necessaria per elaborare le richieste. In questo modo vengono IHttpResponseFeature.Body
sostituiti e IHttpSendFileFeature
.
IHttpAuthenticationFeature: contiene l'oggetto ClaimsPrincipal attualmente associato alla richiesta.
IFormFeature: usato per analizzare e memorizzare nella cache gli invii di moduli HTTP e multipart in ingresso.
IHttpBodyControlFeature: usato per controllare se le operazioni di I/O sincrone sono consentite per i corpi di richiesta o risposta.
IHttpActivityFeature
: usato per aggiungere informazioni per i Activity
listener di diagnostica.
IHttpBufferingFeature: definisce i metodi per disabilitare il buffer delle richieste e/o delle risposte.
IHttpConnectionFeature: definisce le proprietà per l'ID connessione e gli indirizzi e le porte locali e remoti.
IHttpMaxRequestBodySizeFeature: controlla le dimensioni massime consentite del corpo della richiesta per la richiesta corrente.
IHttpRequestBodyDetectionFeature
: indica se la richiesta può avere un corpo.
IHttpRequestIdentifierFeature: aggiunge una proprietà che può essere implementata per identificare in modo univoco le richieste.
IHttpRequestLifetimeFeature: definisce il supporto per l'interruzione delle connessioni o il rilevamento se una richiesta è stata terminata prematuramente, ad esempio da una disconnessione del client.
IHttpRequestTrailersFeature: fornisce l'accesso alle intestazioni del trailer della richiesta, se presenti.
IHttpResetFeature: usato per inviare messaggi di reimpostazione per i protocolli che li supportano, ad esempio HTTP/2 o HTTP/3.
IHttpResponseTrailersFeature: consente all'applicazione di fornire intestazioni trailer di risposta, se supportate.
IHttpSendFileFeature: definisce un metodo per l'invio di file in modo asincrono.
IHttpUpgradeFeature: definisce il supporto per gli aggiornamenti HTTP, che consentono al client di specificare quali protocolli aggiuntivi si desidera utilizzare se il server desidera cambiare protocollo.
IHttpWebSocketFeature: definisce un'API per il supporto di WebSocket.
IHttpsCompressionFeature: controlla se la compressione delle risposte deve essere usata tramite connessioni HTTPS.
IItemsFeature: archivia la Items raccolta per ogni stato dell'applicazione richiesta.
IQueryFeature: analizza e memorizza nella cache la stringa di query.
IRequestBodyPipeFeature: rappresenta il corpo della richiesta come .PipeReader
IRequestCookiesFeature: analizza e memorizza nella cache i valori dell'intestazione della richiesta Cookie
.
IResponseCookiesFeature: controlla la modalità di applicazione dei cookie di risposta all'intestazione Set-Cookie
.
IServerVariablesFeature: questa funzionalità fornisce l'accesso alle variabili del server di richiesta, ad esempio quelle fornite da IIS.
IServiceProvidersFeature: fornisce l'accesso a un oggetto IServiceProvider con servizi di richiesta con ambito.
ISessionFeature: definisce ISessionFactory
e ISession astrazioni per supportare le sessioni utente. ISessionFeature
viene implementato da SessionMiddleware (vedere Sessione in ASP.NET Core).
ITlsConnectionFeature: definisce un'API per il recupero dei certificati client.
ITlsTokenBindingFeature: definisce i metodi per l'uso dei parametri di associazione di token TLS.
ITrackingConsentFeature: usato per eseguire query, concedere e revocare il consenso dell'utente per quanto riguarda l'archiviazione delle informazioni utente correlate all'attività e alle funzionalità del sito.