From 25db4331cf400d173d6c2f604ffca26291281e3b Mon Sep 17 00:00:00 2001 From: TeBeCo Date: Mon, 15 Jul 2019 20:20:18 +0200 Subject: [PATCH] using System.Text.Json for SignalRSamples as JsonTextWriter is a "synchronous IDisposable" ending end throwing when calling /deployment with AllowSynchronousIO turned off (#12165) Thanks for finding and fixing this :) --- .../SignalRSamples/SignalRSamples.csproj | 1 - src/SignalR/samples/SignalRSamples/Startup.cs | 23 ++++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/SignalR/samples/SignalRSamples/SignalRSamples.csproj b/src/SignalR/samples/SignalRSamples/SignalRSamples.csproj index 45adb3b3cd..64b4d62744 100644 --- a/src/SignalR/samples/SignalRSamples/SignalRSamples.csproj +++ b/src/SignalR/samples/SignalRSamples/SignalRSamples.csproj @@ -19,7 +19,6 @@ - diff --git a/src/SignalR/samples/SignalRSamples/Startup.cs b/src/SignalR/samples/SignalRSamples/Startup.cs index ba8cf35786..b82743e678 100644 --- a/src/SignalR/samples/SignalRSamples/Startup.cs +++ b/src/SignalR/samples/SignalRSamples/Startup.cs @@ -9,8 +9,8 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; using SignalRSamples.ConnectionHandlers; using SignalRSamples.Hubs; @@ -18,6 +18,9 @@ namespace SignalRSamples { public class Startup { + + private readonly JsonWriterOptions _jsonWriterOptions = new JsonWriterOptions { Indented = true }; + // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) @@ -57,20 +60,19 @@ namespace SignalRSamples endpoints.MapConnectionHandler("/chat"); - endpoints.MapGet("/deployment", context => + endpoints.MapGet("/deployment", async context => { var attributes = Assembly.GetAssembly(typeof(Startup)).GetCustomAttributes(); context.Response.ContentType = "application/json"; - using (var textWriter = new StreamWriter(context.Response.Body)) - using (var writer = new JsonTextWriter(textWriter)) + await using (var writer = new Utf8JsonWriter(context.Response.BodyWriter, _jsonWriterOptions)) { - var json = new JObject(); + writer.WriteStartObject(); var commitHash = string.Empty; foreach (var attribute in attributes) { - json.Add(attribute.Key, attribute.Value); + writer.WriteString(attribute.Key, attribute.Value); if (string.Equals(attribute.Key, "CommitHash")) { @@ -80,13 +82,12 @@ namespace SignalRSamples if (!string.IsNullOrEmpty(commitHash)) { - json.Add("GitHubUrl", $"https://github.com/aspnet/SignalR/commit/{commitHash}"); + writer.WriteString("GitHubUrl", $"https://github.com/aspnet/SignalR/commit/{commitHash}"); } - json.WriteTo(writer); + writer.WriteEndObject(); + await writer.FlushAsync(); } - - return Task.CompletedTask; }); }); }