Skip to content

Commit 3c217d1

Browse files
authored
refactor: reuse default SerializerOptions in Minimal APIs (#334)
* test: add test case to reproduce encoded Chinese characters * refactor: reuse default SerializerOptions in Minimal APIs
1 parent 76cee98 commit 3c217d1

File tree

8 files changed

+63
-6
lines changed

8 files changed

+63
-6
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Text.Json;
22
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
33
using Microsoft.AspNetCore.Http;
4+
using Microsoft.AspNetCore.Http.Json;
45

56
namespace Cnblogs.Architecture.Ddd.Cqrs.AspNetCore;
67

@@ -25,5 +26,5 @@ public class CqrsHttpOptions
2526
/// <remarks>
2627
/// For Controllers, please use <c>builder.AddControllers().AddLongToStringJsonConverter();</c>
2728
/// </remarks>
28-
public JsonSerializerOptions DefaultJsonSerializerOptions { get; set; } = new(JsonSerializerDefaults.Web);
29+
public JsonSerializerOptions DefaultJsonSerializerOptions { get; set; } = new JsonOptions().SerializerOptions;
2930
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
2+
using Cnblogs.Architecture.Ddd.Infrastructure.Abstractions;
3+
using Cnblogs.Architecture.IntegrationTestProject.Models;
4+
5+
namespace Cnblogs.Architecture.IntegrationTestProject.Application.Queries;
6+
7+
public record ListArticlesQuery(PagingParams? PagingParams, string? OrderByString) : IPageableQuery<ArticleDto>;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
2+
using Cnblogs.Architecture.Ddd.Infrastructure.Abstractions;
3+
using Cnblogs.Architecture.IntegrationTestProject.Models;
4+
5+
namespace Cnblogs.Architecture.IntegrationTestProject.Application.Queries;
6+
7+
public class ListArticlesQueryHandler : IPageableQueryHandler<ListArticlesQuery, ArticleDto>
8+
{
9+
/// <inheritdoc />
10+
public Task<PagedList<ArticleDto>> Handle(ListArticlesQuery request, CancellationToken cancellationToken)
11+
{
12+
return Task.FromResult(new PagedList<ArticleDto>([new ArticleDto
13+
{
14+
Id = 1,
15+
Title = "作为一个高中生开发者,我的所思所想"
16+
}
17+
]));
18+
}
19+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
1+
using Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22
using Cnblogs.Architecture.Ddd.Infrastructure.Abstractions;
33

44
namespace Cnblogs.Architecture.IntegrationTestProject.Application.Queries;
55

6-
public record ListStringsQuery(PagingParams? PagingParams, string? OrderByString) : IPageableQuery<string>;
6+
public record ListStringsQuery(PagingParams? PagingParams, string? OrderByString) : IPageableQuery<string>;

test/Cnblogs.Architecture.IntegrationTestProject/Application/Queries/ListStringsQueryHandler.cs

Lines changed: 2 additions & 2 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 Cnblogs.Architecture.Ddd.Infrastructure.Abstractions;
33

44
namespace Cnblogs.Architecture.IntegrationTestProject.Application.Queries;
@@ -10,4 +10,4 @@ public Task<PagedList<string>> Handle(ListStringsQuery request, CancellationToke
1010
{
1111
return Task.FromResult(new PagedList<string>(["hello"]));
1212
}
13-
}
13+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Cnblogs.Architecture.IntegrationTestProject.Models;
2+
3+
public class ArticleDto
4+
{
5+
public int Id { get; set; }
6+
public string Title { get; set; } = string.Empty;
7+
}

test/Cnblogs.Architecture.IntegrationTestProject/Program.cs

Lines changed: 2 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;
@@ -39,6 +39,7 @@
3939
async (int stringId, [FromQuery] bool found = true)
4040
=> await Task.FromResult(new GetStringQuery(StringId: stringId, Found: found)));
4141
v1.MapQuery<ListStringsQuery>("strings");
42+
v1.MapQuery<ListArticlesQuery>("articles");
4243
v1.MapQuery<GetLongToStringQuery>("long-to-string/{id:long}");
4344
v1.MapCommand<CreateLongToStringCommand>("long-to-string");
4445
v1.MapCommand(
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("/api/v1/articles");
16+
var content = await response.Content.ReadAsStringAsync();
17+
18+
// Assert
19+
Assert.True(response.IsSuccessStatusCode);
20+
Assert.Contains("开发者", content);
21+
}
22+
}

0 commit comments

Comments
 (0)