コード例 #1
0
        public static void WriteErrorDetailsResponseJson(this HttpContext Context, ErrorDetails errorDetails)
        {
            Context.Response.ContentType = "application/json";
            using Utf8JsonWriter writer  = new System.Text.Json.Utf8JsonWriter(Context.Response.BodyWriter);
            writer.WriteStartObject();
            foreach (var item in errorDetails.GetType().GetProperties())
            {
                writer.WritePropertyName(item.Name);
                if (item.PropertyType == typeof(int))
                {
                    writer.WriteNumberValue((int)item.GetValue(errorDetails));
                }
                else if (item.PropertyType == typeof(string))
                {
                    writer.WriteStringValue(item.GetValue(errorDetails).ToString());
                }
            }

            writer.WriteEndObject();
            writer.Flush();
        }
コード例 #2
0
ファイル: JsonExecutor.cs プロジェクト: koralium/Koralium
        private static async Task Execute(string sql, HttpContext context)
        {
            context.Response.Headers.Add("Content-Type", "application/json");

            var koraliumService = context.RequestServices.GetService <IKoraliumTransportService>();
            var logger          = context.RequestServices.GetService <ILogger <IKoraliumTransportService> >();


            QueryResult result = null;

            try
            {
                result = await koraliumService.Execute(sql, new Shared.SqlParameters(), context);
            }
            catch (SqlErrorException error)
            {
                logger.LogWarning(error.Message);
                await WriteError(context, 400, error.Message);

                return;
            }
            catch (AuthorizationFailedException authFailed)
            {
                logger.LogWarning(authFailed.Message, authFailed);
                await WriteError(context, 401, authFailed.Message);

                return;
            }
            catch (Exception e)
            {
                logger.LogError(e, "Unexpected exception thrown");
                await WriteError(context, 500, "Internal error");

                return;
            }

            var responseStream = new System.Text.Json.Utf8JsonWriter(context.Response.Body);

            IJsonEncoder[]    encoders = new IJsonEncoder[result.Columns.Count];
            JsonEncodedText[] names    = new JsonEncodedText[result.Columns.Count];

            for (int i = 0; i < encoders.Length; i++)
            {
                encoders[i] = EncoderHelper.GetEncoder(result.Columns[i]);
                names[i]    = JsonEncodedText.Encode(result.Columns[i].Name);
            }

            System.Diagnostics.Stopwatch encodingWatch = new System.Diagnostics.Stopwatch();
            encodingWatch.Start();
            responseStream.WriteStartObject();

            responseStream.WriteStartArray(_valuesText);
            foreach (var row in result.Result)
            {
                responseStream.WriteStartObject();
                for (int i = 0; i < encoders.Length; i++)
                {
                    responseStream.WritePropertyName(names[i]);
                    encoders[i].Encode(in responseStream, in row);
                }
                responseStream.WriteEndObject();
            }
            responseStream.WriteEndArray();
            responseStream.WriteEndObject();

            encodingWatch.Stop();

            await responseStream.FlushAsync();
        }