Skip to content

Commit 623de86

Browse files
authored
Fix enum mapping in net8 (#24)
1 parent 1624253 commit 623de86

9 files changed

Lines changed: 31 additions & 16 deletions

File tree

GenerateAspNetCoreClient.Command/ClientModelBuilder.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ private List<Parameter> GetParameters(ApiDescription apiDescription)
282282

283283
parameterName = new string(parameterName.Where(c => char.IsLetterOrDigit(c)).ToArray());
284284

285-
var type = parameterDescription.Type ?? typeof(string);
285+
var type = parameterDescription.ModelMetadata?.ModelType ?? parameterDescription.Type ?? typeof(string);
286286

287287
var defaultValue = GetDefaultValueLiteral(parameterDescription, type);
288288

@@ -414,7 +414,7 @@ private List<string> GetNamespaces(IEnumerable<ApiDescription> apiDescriptions,
414414
AddForType(parameterDescription.ModelMetadata.ContainerType);
415415
break;
416416
default:
417-
AddForType(parameterDescription.Type);
417+
AddForType(parameterDescription.ModelMetadata?.ModelType ?? parameterDescription.Type);
418418
break;
419419
}
420420
}
@@ -440,16 +440,15 @@ void AddForType(Type? type)
440440

441441
private static string? GetDefaultValueLiteral(ApiParameterDescription parameter, Type parameterType)
442442
{
443-
// Use reflection for AspNetCore 2.1 compatibility.
444-
var defaultValue = parameter.TryGetPropertyValue<object>(nameof(parameter.DefaultValue));
443+
var defaultValue = parameter.DefaultValue;
445444

446445
if (defaultValue != null && defaultValue is not DBNull)
447446
{
448447
// If defaultValue is not null - return it.
449448
return defaultValue.ToLiteral();
450449
}
451450

452-
var isRequired = parameter.TryGetPropertyValue<bool?>(nameof(parameter.IsRequired)) == true;
451+
var isRequired = parameter.IsRequired;
453452
isRequired |= parameter.ModelMetadata?.IsBindingRequired == true;
454453

455454
if (!parameterType.IsValueType || parameterType.IsNullable())

GenerateAspNetCoreClient.Command/GenerateAspNetCoreClient.Command.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
</ItemGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.0" />
14-
<PackageReference Include="Namotion.Reflection" Version="3.1.0" />
13+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.1" />
14+
<PackageReference Include="Namotion.Reflection" Version="3.1.1" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

Tests/GenerateAspNetCoreClient.Tests/GenerateAspNetCoreClient.Tests.csproj

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1111
</PackageReference>
1212
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
13-
<PackageReference Include="NUnit" Version="4.0.0" />
13+
<PackageReference Include="NUnit" Version="4.0.1" />
1414
<PackageReference Include="NUnit.Analyzers" Version="3.10.0">
1515
<PrivateAssets>all</PrivateAssets>
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@@ -27,8 +27,4 @@
2727
<ProjectReference Include="..\TestWebApi.MinimalApi\TestWebApi.MinimalApi.csproj" />
2828
</ItemGroup>
2929

30-
<ItemGroup>
31-
<Folder Include="__snapshots__\" />
32-
</ItemGroup>
33-
3430
</Project>

Tests/GenerateAspNetCoreClient.Tests/__snapshots__/TestWebApi.Controllers/IAnotherTestApi.cs.snap

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,22 @@
33
using System;
44
using System.Threading.Tasks;
55
using Refit;
6+
using TestWebApi.Models;
67

78
namespace Test.Name.Space
89
{
910
public partial interface IAnotherTestApi
1011
{
1112
[Get("/AnotherTest/with-query-model")]
12-
Task WithQueryModel(string param1 = null, Guid? param2 = null, int? param3 = null);
13+
Task WithQueryModel(string param1 = null, Guid? param2 = null, int? param3 = null, SomeEnum? param4 = null);
1314

1415
[Get("/AnotherTest/with-query-name")]
1516
Task WithQueryParameterName([AliasAs("currency")] string currencyName = null);
1617

1718
[Get("/AnotherTest/with-query-name-array")]
1819
Task WithQueryArrayParameterName([AliasAs("currencies")] string[] currencyNames = null);
20+
21+
[Get("/AnotherTest/with-query-enum")]
22+
Task WithQueryEnumParameter(SomeEnum? enumParam = null);
1923
}
2024
}

Tests/TestWebApi.Controllers/Controllers/AnotherTestController.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,11 @@ public ActionResult WithQueryArrayParameterName([FromQuery(Name = "currencies")]
2626
{
2727
return Ok();
2828
}
29+
30+
[HttpGet("with-query-enum")]
31+
public ActionResult WithQueryEnumParameter([FromQuery] SomeEnum enumParam)
32+
{
33+
return Ok();
34+
}
2935
}
3036
}

Tests/TestWebApi.Dtos/SomeEnum.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace TestWebApi.Models
2+
{
3+
public enum SomeEnum
4+
{
5+
Value1,
6+
Value2,
7+
Value3
8+
}
9+
}

Tests/TestWebApi.Dtos/SomeQueryModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ public class SomeQueryModel
55
public string Param1 { get; set; }
66
public Guid? Param2 { get; set; }
77
public int Param3 { get; set; }
8+
public SomeEnum Param4 { get; set; }
89
}
910
}

Tests/TestWebApi.MinimalApi/TestWebApi.MinimalApi.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server" Version="8.0.0">
10+
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server" Version="8.0.1">
1111
<PrivateAssets>all</PrivateAssets>
1212
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1313
</PackageReference>

Tests/TestWebApi.Versioning/TestWebApi.Versioning.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
<ItemGroup>
1010
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
11-
<PackageReference Include="Asp.Versioning.Mvc" Version="7.1.0" />
12-
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="7.1.0" />
11+
<PackageReference Include="Asp.Versioning.Mvc" Version="8.0.0" />
12+
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.0.0" />
1313
</ItemGroup>
1414

1515
</Project>

0 commit comments

Comments
 (0)