Zugriff auf und Zurückspulen von ASP.NET Core Response.Body
Der direkte Zugriff auf ASP.NET Cores Response.Body
stellt aufgrund seiner schreibgeschützten Natur eine Herausforderung dar. In diesem Artikel werden effiziente Methoden zum Lesen und Zurückspulen des Antwortinhalts untersucht und dabei die Einschränkungen naiver Ansätze angesprochen.
Ineffiziente Methoden:
Eine übliche, aber ineffiziente Lösung besteht darin, Response.Body
durch ein MemoryStream
zu ersetzen, den Inhalt zu lesen und dann den ursprünglichen Stream wiederherzustellen. Diese Methode führt zu unnötigem Overhead und Leistungsproblemen.
Die Rückspulbeschränkung:
Im Gegensatz zu Request.Body
unterstützt Response.Body
das Zurückspulen nicht grundsätzlich. Der Versuch, es mehrmals zu lesen, führt bei nachfolgenden Lesevorgängen zu einem leeren Stream.
Die Buffered-Stream-Lösung:
Die optimale Lösung nutzt gepufferte Streams. Eine Middleware wie ResponseBodyRewindMiddleware
fängt den Antwortstrom ab. Es erstellt ein MemoryStream
, kopiert den Antwortinhalt hinein und stellt dann das Original Response.Body
wieder her. Diese gepufferte Kopie ermöglicht mehrere Lesevorgänge, ohne den ursprünglichen Stream zu beeinträchtigen, und stellt sicher, dass die Stream-Position korrekt zurückgesetzt wird.
Dieser Ansatz bietet eine deutliche Leistungsverbesserung gegenüber der direkten Manipulation des Originals Response.Body
und bietet eine saubere und effiziente Möglichkeit, auf Antwortdaten zuzugreifen und diese wiederzuverwenden. Die Verwendung gepufferter Streams ist entscheidend für die Handhabung von Szenarien, die mehrere Lesevorgänge des Antworttexts erfordern.
Das obige ist der detaillierte Inhalt vonWie kann ich den Response.Body von ASP.NET Core effizient lesen und zurückspulen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!