1
1
using System . Buffers ;
2
+ using System . Text ;
2
3
using System . Text . Json ;
3
4
using Microsoft . AspNetCore . Hosting . Server ;
4
5
using Microsoft . AspNetCore . Http . Features ;
@@ -22,6 +23,8 @@ public Task ProcessRequestAsync(IFeatureCollection features)
22
23
{
23
24
"/plaintext" => Plaintext ( res , features ) ,
24
25
"/json" => Json ( res , features ) ,
26
+ "/json-string" => JsonString ( res , features ) ,
27
+ "/json-utf8bytes" => JsonUtf8Bytes ( res , features ) ,
25
28
"/json-chunked" => JsonChunked ( res , features ) ,
26
29
"/" => Index ( res , features ) ,
27
30
_ => NotFound ( res , features ) ,
@@ -78,6 +81,40 @@ private static async Task JsonChunked(IHttpResponseFeature res, IFeatureCollecti
78
81
await body . Writer . FlushAsync ( ) ;
79
82
}
80
83
84
+ private static async Task JsonString ( IHttpResponseFeature res , IFeatureCollection features )
85
+ {
86
+ res . StatusCode = StatusCodes . Status200OK ;
87
+ res . Headers . ContentType = "application/json; charset=utf-8" ;
88
+
89
+ var message = JsonSerializer . Serialize ( new JsonMessage { message = "Hello, World!" } , _jsonSerializerOptions ) ;
90
+ res . Headers . ContentLength = Encoding . UTF8 . GetByteCount ( message ) ;
91
+
92
+ var body = features . GetResponseBodyFeature ( ) ;
93
+ await body . StartAsync ( ) ;
94
+
95
+ Span < byte > buffer = stackalloc byte [ 256 ] ;
96
+ var length = Encoding . UTF8 . GetBytes ( message , buffer ) ;
97
+ body . Writer . Write ( buffer [ ..length ] ) ;
98
+
99
+ await body . Writer . FlushAsync ( ) ;
100
+ }
101
+
102
+ private static async Task JsonUtf8Bytes ( IHttpResponseFeature res , IFeatureCollection features )
103
+ {
104
+ res . StatusCode = StatusCodes . Status200OK ;
105
+ res . Headers . ContentType = "application/json; charset=utf-8" ;
106
+
107
+ var messageBytes = JsonSerializer . SerializeToUtf8Bytes ( new JsonMessage { message = "Hello, World!" } , _jsonSerializerOptions ) ;
108
+ res . Headers . ContentLength = messageBytes . Length ;
109
+
110
+ var body = features . GetResponseBodyFeature ( ) ;
111
+ await body . StartAsync ( ) ;
112
+
113
+ body . Writer . Write ( messageBytes ) ;
114
+
115
+ await body . Writer . FlushAsync ( ) ;
116
+ }
117
+
81
118
private static readonly ObjectPoolProvider _objectPoolProvider = new DefaultObjectPoolProvider ( ) ;
82
119
private static readonly ObjectPool < ArrayBufferWriter < byte > > _bufferWriterPool = _objectPoolProvider . Create < ArrayBufferWriter < byte > > ( ) ;
83
120
private static readonly ObjectPool < Utf8JsonWriter > _jsonWriterPool = _objectPoolProvider . Create ( new Utf8JsonWriterPooledObjectPolicy ( ) ) ;
0 commit comments