void WriteResponseForPostJson(HttpRequest request, HttpResponse response) { // read request JSON uint requestedCount = ReadCount(request.Body); // write response JSON var json = new JsonWriter<ResponseFormatter>(response.Body, prettyPrint: false); json.WriteObjectStart(); json.WriteArrayStart(); for (int i = 0; i < requestedCount; i++) { json.WriteString("hello!"); } json.WriteArrayEnd(); json.WriteObjectEnd(); // write headers var headers = response.Headers; headers.AppendHttpStatusLine(HttpVersion.V1_1, 200, new Utf8String("OK")); headers.Append("Content-Length : "); headers.Append(response.Body.CommitedBytes); headers.AppendHttpNewLine(); headers.Append("Content-Type : text/plain; charset=UTF-8"); headers.AppendHttpNewLine(); headers.Append("Server : .NET Core Sample Server"); headers.AppendHttpNewLine(); headers.Append("Date : "); headers.Append(DateTime.UtcNow, 'R'); headers.AppendHttpNewLine(); headers.AppendHttpNewLine(); }
static void Write(ref JsonWriter<ArrayFormatter> json) { json.WriteObjectStart(); json.WriteAttribute("age", 30); json.WriteAttribute("first", "John"); json.WriteAttribute("last", "Smith"); json.WriteMember("phoneNumbers"); json.WriteArrayStart(); json.WriteString("425-000-1212"); json.WriteString("425-000-1213"); json.WriteArrayEnd(); json.WriteMember("address"); json.WriteObjectStart(); json.WriteAttribute("street", "1 Microsoft Way"); json.WriteAttribute("city", "Redmond"); json.WriteAttribute("zip", 98052); json.WriteObjectEnd(); json.WriteObjectEnd(); }
// This method is a bit of a mess. We need to fix many Http and Json APIs void WriteResponseForPostJson(BufferFormatter formatter, HttpRequestLine requestLine, ReadOnlySpan<byte> body) { Console.WriteLine(new Utf8String(body)); uint requestedCount = ReadCountUsingReader(body).GetValueOrDefault(1); //uint requestedCount = ReadCountUsingNonAllocatingDom(body).GetValueOrDefault(1); // TODO: this needs to be written directly to the buffer after content length reservation is implemented. var buffer = ArrayPool<byte>.Shared.Rent(2048); var spanFormatter = new SpanFormatter(buffer.Slice(), FormattingData.InvariantUtf8); var json = new JsonWriter<SpanFormatter>(spanFormatter, prettyPrint: true); json.WriteObjectStart(); json.WriteArrayStart(); for (int i = 0; i < requestedCount; i++) { json.WriteString(DateTime.UtcNow.ToString()); // TODO: this needs to not allocate. } json.WriteArrayEnd(); ; json.WriteObjectEnd(); var responseBodyText = new Utf8String(buffer, 0, spanFormatter.CommitedByteCount); formatter.AppendHttpStatusLine(HttpVersion.V1_1, 200, new Utf8String("OK")); formatter.Append(new Utf8String("Content-Length : ")); formatter.Append(responseBodyText.Length); formatter.AppendHttpNewLine(); formatter.Append("Content-Type : text/plain; charset=UTF-8"); formatter.AppendHttpNewLine(); formatter.Append("Server : .NET Core Sample Serve"); formatter.AppendHttpNewLine(); formatter.Append(new Utf8String("Date : ")); formatter.Append(DateTime.UtcNow.ToString("R")); formatter.AppendHttpNewLine(); formatter.AppendHttpNewLine(); formatter.Append(responseBodyText); ArrayPool<byte>.Shared.Return(buffer); }