Skip to content

Commit b212eb9

Browse files
[OpenApi] Fix thread static use and write directly to PipeWriter (#61700)
1 parent e91d02a commit b212eb9

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

src/OpenApi/src/Extensions/OpenApiEndpointRouteBuilderExtensions.cs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -53,29 +53,23 @@ public static IEndpointConventionBuilder MapOpenApi(this IEndpointRouteBuilder e
5353
{
5454
var document = await documentService.GetOpenApiDocumentAsync(context.RequestServices, context.Request, context.RequestAborted);
5555
var documentOptions = options.Get(lowercasedDocumentName);
56-
using var output = MemoryBufferWriter.Get();
57-
using var writer = Utf8BufferTextWriter.Get(output);
58-
try
56+
57+
using var writer = new Utf8BufferTextWriter();
58+
writer.SetWriter(context.Response.BodyWriter);
59+
60+
if (UseYaml(pattern))
5961
{
60-
if (UseYaml(pattern))
61-
{
62-
await document.SerializeAsync(new OpenApiYamlWriter(writer), documentOptions.OpenApiVersion);
63-
context.Response.ContentType = "text/plain+yaml;charset=utf-8";
64-
}
65-
else
66-
{
67-
await document.SerializeAsync(new OpenApiJsonWriter(writer), documentOptions.OpenApiVersion);
68-
context.Response.ContentType = "application/json;charset=utf-8";
69-
}
70-
await context.Response.BodyWriter.WriteAsync(output.ToArray(), context.RequestAborted);
71-
await context.Response.BodyWriter.FlushAsync(context.RequestAborted);
62+
context.Response.ContentType = "text/plain+yaml;charset=utf-8";
63+
await context.Response.StartAsync();
64+
await document.SerializeAsync(new OpenApiYamlWriter(writer), documentOptions.OpenApiVersion, context.RequestAborted);
7265
}
73-
finally
66+
else
7467
{
75-
MemoryBufferWriter.Return(output);
76-
Utf8BufferTextWriter.Return(writer);
68+
context.Response.ContentType = "application/json;charset=utf-8";
69+
await context.Response.StartAsync();
70+
await document.SerializeAsync(new OpenApiJsonWriter(writer), documentOptions.OpenApiVersion, context.RequestAborted);
7771
}
78-
72+
await context.Response.BodyWriter.FlushAsync(context.RequestAborted);
7973
}
8074
}).ExcludeFromDescription();
8175
}

0 commit comments

Comments
 (0)