From 941862a8978f47d1bbb04725195ef65782c6e5b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Thu, 6 Apr 2023 12:32:00 +0800 Subject: [PATCH] refactor!: use enum to present map nullable route parameter --- ...logs.Architecture.Ddd.Cqrs.AspNetCore.csproj | 8 ++++---- .../CqrsRouteMapper.cs | 6 +++--- .../MapNullableRouteParameter.cs | 17 +++++++++++++++++ .../Program.cs | 2 +- 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/MapNullableRouteParameter.cs diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj index 2c6b25f..89046c0 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj @@ -7,11 +7,11 @@ - - + + - - + + diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsRouteMapper.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsRouteMapper.cs index c4814fb..7369aa9 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsRouteMapper.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsRouteMapper.cs @@ -43,7 +43,7 @@ public static class CqrsRouteMapper public static IEndpointConventionBuilder MapQuery( this IEndpointRouteBuilder app, [StringSyntax("Route")] string route, - bool mapNullableRouteParameters = false, + MapNullableRouteParameter mapNullableRouteParameters = MapNullableRouteParameter.Disable, string nullRouteParameterPattern = "-") { return app.MapQuery( @@ -79,7 +79,7 @@ public static IEndpointConventionBuilder MapQuery( this IEndpointRouteBuilder app, [StringSyntax("Route")] string route, Delegate handler, - bool mapNullableRouteParameters = false, + MapNullableRouteParameter mapNullableRouteParameters = MapNullableRouteParameter.Disable, string nullRouteParameterPattern = "-") { var isQuery = handler.Method.ReturnType.GetInterfaces().Where(x => x.IsGenericType) @@ -90,7 +90,7 @@ public static IEndpointConventionBuilder MapQuery( "delegate does not return a query, please make sure it returns object that implement IQuery<> or IListQuery<> or interface that inherit from them"); } - if (mapNullableRouteParameters == false) + if (mapNullableRouteParameters is MapNullableRouteParameter.Disable) { return app.MapGet(route, handler).AddEndpointFilter(); } diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/MapNullableRouteParameter.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/MapNullableRouteParameter.cs new file mode 100644 index 0000000..3c010c2 --- /dev/null +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/MapNullableRouteParameter.cs @@ -0,0 +1,17 @@ +namespace Cnblogs.Architecture.Ddd.Cqrs.AspNetCore; + +/// +/// Defines behavior for nullable route parameters. +/// +public enum MapNullableRouteParameter +{ + /// + /// Map different routes to present null for nullable route parameters. + /// + Enable = 1, + + /// + /// Do not map extra route for nullable route parameters. + /// + Disable = 2 +} diff --git a/test/Cnblogs.Architecture.IntegrationTestProject/Program.cs b/test/Cnblogs.Architecture.IntegrationTestProject/Program.cs index a224822..5ca7c00 100644 --- a/test/Cnblogs.Architecture.IntegrationTestProject/Program.cs +++ b/test/Cnblogs.Architecture.IntegrationTestProject/Program.cs @@ -35,7 +35,7 @@ var apis = app.NewVersionedApi(); var v1 = apis.MapGroup("/api/v{version:apiVersion}").HasApiVersion(1); -v1.MapQuery("apps/{appId}/strings/{stringId:int}/value", true); +v1.MapQuery("apps/{appId}/strings/{stringId:int}/value", MapNullableRouteParameter.Enable); v1.MapQuery("strings/{id:int}"); v1.MapQuery("strings"); v1.MapCommand("strings", (CreatePayload payload) => new CreateCommand(payload.NeedError));