From 879fb614c6853ab3bb83155c82722afb2933fc60 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 2 Dec 2022 11:04:34 +0800 Subject: ... --- .../CrupestApi.Commons/CrupestApi.Commons.csproj | 9 +++++ .../CrupestApi/CrupestApi.Commons/Error.cs | 19 ++++++++++ .../CrupestApi.Commons/HttpResponseAction.cs | 3 ++ .../CrupestApi/CrupestApi.Commons/Json.cs | 40 ++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 docker/crupest-api/CrupestApi/CrupestApi.Commons/CrupestApi.Commons.csproj create mode 100644 docker/crupest-api/CrupestApi/CrupestApi.Commons/Error.cs create mode 100644 docker/crupest-api/CrupestApi/CrupestApi.Commons/HttpResponseAction.cs create mode 100644 docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons') diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/CrupestApi.Commons.csproj b/docker/crupest-api/CrupestApi/CrupestApi.Commons/CrupestApi.Commons.csproj new file mode 100644 index 0000000..72a1294 --- /dev/null +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/CrupestApi.Commons.csproj @@ -0,0 +1,9 @@ + + + + net7.0 + enable + enable + + + diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Error.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Error.cs new file mode 100644 index 0000000..b298f7a --- /dev/null +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Error.cs @@ -0,0 +1,19 @@ +namespace CrupestApi.Commons; + +public class ErrorBody +{ + public ErrorBody(string message) + { + Message = message; + } + + public string Message { get; set; } +} + +public static class CrupestApiErrorExtensions +{ + public static async Task WriteErrorMessageAsync(this HttpResponse response, string message, int statusCode = 400, HttpResponseAction? beforeWriteBody = null, CancellationToken cancellationToken = default) + { + await response.WriteJsonAsync(new ErrorBody(message), statusCode: statusCode, beforeWriteBody, cancellationToken); + } +} diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/HttpResponseAction.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/HttpResponseAction.cs new file mode 100644 index 0000000..4b76066 --- /dev/null +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/HttpResponseAction.cs @@ -0,0 +1,3 @@ +namespace CrupestApi.Commons; + +public delegate Task HttpResponseAction(HttpResponse response); diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs new file mode 100644 index 0000000..0ec3ff0 --- /dev/null +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs @@ -0,0 +1,40 @@ +using System.Text; +using System.Text.Json; + +namespace CrupestApi.Commons; + + +public static class CrupestApiJsonExtensions +{ + public static IServiceCollection AddJsonOptions(this IServiceCollection services) + { + services.AddOptions(); + services.Configure(config => + { + config.AllowTrailingCommas = true; + config.PropertyNameCaseInsensitive = true; + config.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + }); + + return services; + } + + + public static async Task WriteJsonAsync(this HttpResponse response, T bodyObject, int statusCode = 200, HttpResponseAction? beforeWriteBody = null, CancellationToken cancellationToken = default) + { + var jsonOptions = response.HttpContext.RequestServices.GetRequiredService(); + byte[] json = JsonSerializer.SerializeToUtf8Bytes(bodyObject, jsonOptions); + + var byteCount = json.Length; + response.StatusCode = statusCode; + response.Headers.ContentType = "application/json; charset=utf-8"; + response.Headers.ContentLength = byteCount; + + if (beforeWriteBody is not null) + { + await beforeWriteBody(response); + } + + await response.Body.WriteAsync(json, cancellationToken); + } +} -- cgit v1.2.3