Anforderungsfeatures in ASP.NET Core
Von Steve Smith
Die HttpContext
-API, mit der Anwendungen und Middleware Anforderungen verarbeiten, verfügt über eine zugrunde liegende Abstraktionsebene in Form von sogenannten Featureschnittstellen. Jede Featureschnittstelle bietet eine differenzierte Teilmenge der Funktionen, die von HttpContext
verfügbar gemacht werden. Diese Schnittstellen können vom Server oder der Middleware während der Verarbeitung der Anforderung hinzugefügt, geändert, umschlossen, ersetzt oder sogar entfernt werden, ohne dass der gesamte HttpContext
erneut implementiert werden muss. Sie können auch verwendet werden, um bei Tests Funktionen zu simulieren.
Featuresammlung
Die Features-Eigenschaft von HttpContext
bietet Zugriff auf die Sammlung von Featureschnittstellen für die aktuelle Anforderung. Da die Featuresammlung auch im Kontext einer Anforderung änderbar ist, kann Middleware verwendet werden, um die Sammlung zu modifizieren und Unterstützung für zusätzliche Features hinzuzufügen. Einige erweiterte Features sind nur verfügbar, wenn Sie über die Featuresammlung auf die zugehörige Schnittstelle zugreifen.
Featureschnittstellen
ASP.NET Core definiert einige allgemeine HTTP-Featureschnittstellen in Microsoft.AspNetCore.Http.Features mit deren Hilfe die verschiedenen Server und Middleware die unterstützten Features ermitteln können. Server und Middleware können auch eigene Schnittstellen mit zusätzlichen Funktionen bereitstellen.
Die meisten Featureschnittstellen bieten optionale, ergänzende Funktionen, und die zugehörigen HttpContext
-APIs stellen Standardwerte bereit, wenn das Feature nicht vorhanden ist. Einige Schnittstellen werden im Folgenden als erforderlich dargestellt, da sie wichtige Anforderungs- und Antwortfunktionen bereitstellen und implementiert werden müssen, um die Anforderung zu verarbeiten.
Die folgenden Featureschnittstellen stammen von Microsoft.AspNetCore.Http.Features:
IHttpRequestFeature: Definiert die Struktur einer HTTP-Anforderung, einschließlich Protokoll, Pfad, Abfragezeichenfolge, Header und Text. Dieses Feature ist erforderlich, um Anforderungen zu verarbeiten.
IHttpResponseFeature: Definiert die Struktur einer HTTP-Antwort, einschließlich Statuscode, Header und Antworttext. Dieses Feature ist erforderlich, um Anforderungen zu verarbeiten.
IHttpResponseBodyFeature: Definiert verschiedene Methoden zum Schreiben des Antworttexts, wobei ein Stream
, ein PipeWriter
oder eine Datei verwendet wird. Dieses Feature ist erforderlich, um Anforderungen zu verarbeiten. Hierdurch werden IHttpResponseFeature.Body
und IHttpSendFileFeature
ersetzt.
IHttpAuthenticationFeature: Enthält den der Anforderung derzeit zugeordneten ClaimsPrincipal.
IFormFeature: Dient zum Analysieren und Zwischenspeichern eingehender HTTP- und mehrteiliger Formularübermittlungen.
IHttpBodyControlFeature: Steuert, ob synchrone E/A-Vorgänge für den Anforderungs- oder Antworttext zulässig sind.
IHttpActivityFeature
: Wird verwendet, um Activity
-Informationen für Diagnoselistener hinzuzufügen
IHttpBufferingFeature: Definiert Methoden zum Deaktivieren des Pufferns von Anforderungen und/oder Antworten.
IHttpConnectionFeature: Definiert Eigenschaften für die Verbindungs-ID, lokale und Remoteadressen sowie Ports.
IHttpMaxRequestBodySizeFeature: Steuert die maximal zulässige Größe des Anforderungstexts für die aktuelle Anforderung.
IHttpRequestBodyDetectionFeature
: Gibt an, ob die Anforderung einen Text enthalten kann.
IHttpRequestIdentifierFeature: Fügt eine Eigenschaft hinzu, die implementiert werden kann, um eine Anforderung eindeutig zu identifizieren.
IHttpRequestLifetimeFeature: Definiert Unterstützung für das Abbrechen von Verbindungen oder das Erkennen einer verfrühten Beendigung einer Anforderung, z. B. durch eine abgebrochene Verbindung mit dem Client.
IHttpRequestTrailersFeature: Ermöglicht Zugriff auf die Nachspannheader der Anforderung, sofern vorhanden.
IHttpResetFeature: Wird zum Senden von Zurücksetzungsmeldungen für Protokolle verwendet, die diese unterstützen, z. B. HTTP/2 oder HTTP/3.
IHttpResponseTrailersFeature: Ermöglicht der Anwendung, Nachspannheader in der Antwort anzugeben, sofern diese unterstützt werden.
IHttpSendFileFeature: Definiert eine Methode zum asynchronen Senden von Dateien.
IHttpUpgradeFeature: Definiert Unterstützung für HTTP-Upgrades, mit denen der Client festlegen kann, welche zusätzlichen Protokolle er verwenden möchte, wenn der Server Protokolle wechseln möchte.
IHttpWebSocketFeature: Definiert eine API zur Unterstützung von Websockets.
IHttpsCompressionFeature: Steuert, ob über HTTPS-Verbindungen eine Antwortkomprimierung verwendet werden soll.
IItemsFeature: Speichert die Items-Sammlung für den Anwendungszustand pro Anforderung.
IQueryFeature: Analysiert die Abfragezeichenfolge und speichert sie zwischen.
IRequestBodyPipeFeature: Stellt den Anforderungstext als einen PipeReader dar.
IRequestCookiesFeature: Analysiert die Cookie
-Headerwerte der Anforderung und speichert sie zwischen.
IResponseCookiesFeature: Steuert, wie die cookie der Antwort auf den Set-Cookie
-Header angewandt werden.
IServerVariablesFeature: Dieses Feature ermöglicht den Zugriff auf Servervariablen der Anforderung, z. B. die von IIS bereitgestellten.
IServiceProvidersFeature: Ermöglicht den Zugriff auf einen IServiceProvider mit bereichsspezifischen Anforderungsdiensten.
ISessionFeature: Definiert die Abstraktionen ISessionFactory
und ISession zur Unterstützung von Benutzersitzungen. ISessionFeature
wird über die SessionMiddleware implementiert (siehe Sitzung in ASP.NET Core).
ITlsConnectionFeature: Definiert eine API zum Abrufen von Clientzertifikaten.
ITlsTokenBindingFeature: Definiert Methoden zum Arbeiten mit TLS-Tokenbindungsparametern.
ITrackingConsentFeature: Dient zum Abfragen, Gewähren und Widerrufen der Benutzereinwilligung zur Speicherung von Benutzerinformationen im Zusammenhang mit Aktivitäten und Funktionen der Website.