Browse Source

Use StreamContent.LoadIntoBufferAsync() to allow reading compressed responses multiple times

pull/1528/head
Kévin Chalet 3 years ago
parent
commit
147cef29c1
  1. 9
      src/OpenIddict.Client.SystemNetHttp/OpenIddictClientSystemNetHttpHandlers.cs
  2. 9
      src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpHandlers.cs

9
src/OpenIddict.Client.SystemNetHttp/OpenIddictClientSystemNetHttpHandlers.cs

@ -347,6 +347,10 @@ public static partial class OpenIddictClientSystemNetHttpHandlers
try
{
// Note: HttpCompletionOption.ResponseContentRead is deliberately used to force the
// response stream to be buffered so that can it can be read multiple times if needed
// (e.g if the JSON deserialization process fails, the stream is read as a string
// during a second pass a second time for logging/debuggability purposes).
response = await client.SendAsync(request, HttpCompletionOption.ResponseContentRead);
}
@ -524,7 +528,12 @@ public static partial class OpenIddictClientSystemNetHttpHandlers
// to the HTTP response message to use the specified stream transformations.
if (stream is not null)
{
// Note: StreamContent.LoadIntoBufferAsync is deliberately used to force the stream
// content to be buffered so that can it can be read multiple times if needed
// (e.g if the JSON deserialization process fails, the stream is read as a string
// during a second pass a second time for logging/debuggability purposes).
var content = new StreamContent(stream);
await content.LoadIntoBufferAsync();
// Copy the headers from the original content to the new instance.
foreach (var header in response.Content.Headers)

9
src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpHandlers.cs

@ -348,6 +348,10 @@ public static partial class OpenIddictValidationSystemNetHttpHandlers
try
{
// Note: HttpCompletionOption.ResponseContentRead is deliberately used to force the
// response stream to be buffered so that can it can be read multiple times if needed
// (e.g if the JSON deserialization process fails, the stream is read as a string
// during a second pass a second time for logging/debuggability purposes).
response = await client.SendAsync(request, HttpCompletionOption.ResponseContentRead);
}
@ -525,7 +529,12 @@ public static partial class OpenIddictValidationSystemNetHttpHandlers
// to the HTTP response message to use the specified stream transformations.
if (stream is not null)
{
// Note: StreamContent.LoadIntoBufferAsync is deliberately used to force the stream
// content to be buffered so that can it can be read multiple times if needed
// (e.g if the JSON deserialization process fails, the stream is read as a string
// during a second pass a second time for logging/debuggability purposes).
var content = new StreamContent(stream);
await content.LoadIntoBufferAsync();
// Copy the headers from the original content to the new instance.
foreach (var header in response.Content.Headers)

Loading…
Cancel
Save