mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2026-01-01 06:00:46 +00:00
Avoid a potential synchronous flush when serializing api authentication middleware response
Might result in something along: 2021-07-30 16:39:43|ArchiSteamFarm-6766|ERROR|Microsoft.AspNetCore.Server.Kestrel|Connection id "0HMAJF2E5IVHB", Request id "0HMAJF2E5IVHB:00000005": An unhandled exception was thrown by the application. System.InvalidOperationException: Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead. at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpResponseStream.Flush() at Microsoft.AspNetCore.ResponseCaching.ResponseCachingStream.Flush() at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionBody.Flush() at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) at System.IO.StreamWriter.Dispose(Boolean disposing) at System.IO.StreamWriter.Close() at Newtonsoft.Json.JsonTextWriter.CloseBufferAndWriter() at Newtonsoft.Json.JsonTextWriter.Close() at Newtonsoft.Json.JsonWriter.Dispose(Boolean disposing) at Newtonsoft.Json.JsonWriter.System.IDisposable.Dispose() at ArchiSteamFarm.IPC.WebUtilities.WriteJsonAsync[TValue](HttpResponse response, TValue value, JsonSerializerSettings jsonSerializerSettings) at ArchiSteamFarm.IPC.WebUtilities.WriteJsonAsync[TValue](HttpResponse response, TValue value, JsonSerializerSettings jsonSerializerSettings) at ArchiSteamFarm.IPC.Integration.ApiAuthenticationMiddleware.InvokeAsync(HttpContext context, IOptions`1 jsonOptions) at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
This commit is contained in:
@@ -66,18 +66,18 @@ namespace ArchiSteamFarm.IPC {
|
||||
throw new ArgumentNullException(nameof(response));
|
||||
}
|
||||
|
||||
JsonSerializer serializer = JsonSerializer.CreateDefault(jsonSerializerSettings);
|
||||
|
||||
response.ContentType = "application/json; charset=utf-8";
|
||||
|
||||
StreamWriter streamWriter = new(response.Body, Encoding.UTF8);
|
||||
|
||||
await using (streamWriter.ConfigureAwait(false)) {
|
||||
using JsonTextWriter jsonWriter = new(streamWriter);
|
||||
|
||||
JsonSerializer serializer = JsonSerializer.CreateDefault(jsonSerializerSettings);
|
||||
using JsonTextWriter jsonWriter = new(streamWriter) {
|
||||
CloseOutput = false
|
||||
};
|
||||
|
||||
serializer.Serialize(jsonWriter, value);
|
||||
|
||||
await jsonWriter.FlushAsync().ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user