Skip to content

Commit effb80d

Browse files
committed
refactor: use built-in json options in Minimal APIs
1 parent 76cee98 commit effb80d

File tree

5 files changed

+32
-8
lines changed

5 files changed

+32
-8
lines changed

src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CommandEndpointHandler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
1+
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22
using MediatR;
33
using Microsoft.AspNetCore.Http;
44
using Microsoft.Extensions.Options;
@@ -47,8 +47,8 @@ public class CommandEndpointHandler(IMediator mediator, IOptions<CqrsHttpOptions
4747
if (commandResponse is IObjectResponse objectResponse)
4848
{
4949
return context.HttpContext.Request.Headers.CqrsVersion() > 1
50-
? Results.Extensions.Cqrs(response, _options.DefaultJsonSerializerOptions)
51-
: Results.Json(objectResponse.GetResult(), _options.DefaultJsonSerializerOptions);
50+
? Results.Extensions.Cqrs(response)
51+
: Results.Json(objectResponse.GetResult());
5252
}
5353

5454
return Results.NoContent();

src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsHttpOptionsInjector.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public static CqrsInjector UseCustomCommandErrorResponseMapper(
5050
/// <returns></returns>
5151
public static CqrsInjector AddLongToStringJsonConverter(this CqrsInjector injector)
5252
{
53-
injector.Services.Configure<CqrsHttpOptions>(
54-
o => o.DefaultJsonSerializerOptions.Converters.Add(new LongToStringConverter()));
53+
injector.Services.ConfigureHttpJsonOptions(
54+
o => o.SerializerOptions.Converters.Add(new LongToStringConverter()));
5555
return injector;
5656
}
5757
}

src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/QueryEndpointHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using MediatR;
1+
using MediatR;
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.Extensions.Options;
44

@@ -26,6 +26,6 @@ public class QueryEndpointHandler(IMediator mediator, IOptions<CqrsHttpOptions>
2626
var response = await mediator.Send(query);
2727
return response == null
2828
? Results.NotFound()
29-
: Results.Json(response, cqrsHttpOptions.Value.DefaultJsonSerializerOptions);
29+
: Results.Json(response);
3030
}
3131
}

test/Cnblogs.Architecture.IntegrationTestProject/Program.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Reflection;
1+
using System.Reflection;
22
using Cnblogs.Architecture.Ddd.Cqrs.AspNetCore;
33
using Cnblogs.Architecture.Ddd.EventBus.Abstractions;
44
using Cnblogs.Architecture.Ddd.EventBus.Dapr;
@@ -49,6 +49,8 @@
4949
(int id, UpdatePayload payload) => new UpdateCommand(id, payload.NeedValidationError, payload.NeedExecutionError));
5050
v1.MapCommand<DeleteCommand>("strings/{id:int}");
5151

52+
app.MapGet("/brand", () => Results.Ok(new { Title = "博客园" }));
53+
5254
// generic command map
5355
v1.MapPostCommand<CreateCommand>("generic-map/strings");
5456
v1.MapPutCommand<UpdateCommand>("generic-map/strings");
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Cnblogs.Architecture.IntegrationTestProject;
2+
using Microsoft.AspNetCore.Mvc.Testing;
3+
4+
namespace Cnblogs.Architecture.IntegrationTests;
5+
6+
public class MinimalApiTests
7+
{
8+
[Fact]
9+
public async Task ResponseJsonWithChineseChars_RemainUnencodedAsync()
10+
{
11+
// Arrange
12+
var builder = new WebApplicationFactory<Program>();
13+
14+
// Act
15+
var response = await builder.CreateClient().GetAsync("/brand");
16+
var content = await response.Content.ReadAsStringAsync();
17+
18+
// Assert
19+
Assert.True(response.IsSuccessStatusCode);
20+
Assert.Equal("{\"title\":\"博客园\"}", content);
21+
}
22+
}

0 commit comments

Comments
 (0)