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

Funktionsschnittstellen

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 Anfragen 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 den Zugriff auf die Trailer-Header der Anfrage, 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 anforderungsspezifischen Anwendungszustand.

IQueryFeature: Analysiert die Abfragezeichenfolge und zwischenspeichert sie.

IRequestBodyPipeFeature: Stellt den Anforderungstext als einen PipeReader dar.

IRequestCookiesFeature: Analysiert die Cookie-Headerwerte der Anforderung und speichert sie zwischen.

IResponseCookiesFeature: Steuert, wie Cookies in der Antwort auf den Set-Cookie-Header angewendet 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 durch SessionMiddleware implementiert (siehe Sitzung in ASP.NET Core).

ITlsConnectionFeature: Definiert eine API zum Abrufen von Clientzertifikaten.

ITlsConnectionFeature definiert außerdem , wodurch App-Code ein TryGetChannelBindingBytes(ChannelBindingKind, out ReadOnlyMemory<byte>)-TLS-Kanalbindungstoken für die aktuelle Verbindung abrufen kann, z. B. das mit ChannelBindingKind.Endpoint angeforderte Endpunkt-Token. Die Kanalbindung ermöglicht es einer Authentifizierungsebene, Anmeldeinformationen an den zugrunde liegenden TLS-Kanal zu binden, wodurch Anmeldeinformationsrelay-Angriffe als Teil des erweiterten Schutzes für die Authentifizierung (EPA) abgemildert werden. Kestrel ruft das Token von SslStream.TransportContext.GetChannelBinding ab, und HTTP.sys macht es standardmäßig verfügbar. Weitere Informationen finden Sie unter HttpSys aktiviert standardmäßig die Offenlegung des TLS-Kanalbindungstokens und die Aushandlung der Authentifizierung verwendet TLS-Kanalbindung. Die Methode gibt false zurück, wenn für das angeforderte ChannelBindingKind kein Token verfügbar ist.

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.