diff --git a/docs/generators/csharp-netcore.md b/docs/generators/csharp-netcore.md index 2b794b27d74..40563075005 100644 --- a/docs/generators/csharp-netcore.md +++ b/docs/generators/csharp-netcore.md @@ -26,3 +26,4 @@ sidebar_label: csharp-netcore |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |netCoreProjectFile|Use the new format (.NET Core) for .NET project files (.csproj).| |false| |validatable|Generates self-validatable models.| |true| +|caseInsensitiveResponseHeaders|Make API response's headers case-insensitive| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java index f66263b6d50..b032ac3beed 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java @@ -78,6 +78,8 @@ public class CSharpNetCoreClientCodegen extends AbstractCSharpCodegen { // By default, generated code is considered public protected boolean nonPublicApi = Boolean.FALSE; + protected boolean caseInsensitiveResponseHeaders = Boolean.FALSE; + public CSharpNetCoreClientCodegen() { super(); @@ -206,6 +208,10 @@ public class CSharpNetCoreClientCodegen extends AbstractCSharpCodegen { CodegenConstants.VALIDATABLE_DESC, this.validatable); + addSwitch(CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS, + CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS_DESC, + this.caseInsensitiveResponseHeaders); + regexModifiers = new HashMap<>(); regexModifiers.put('i', "IgnoreCase"); regexModifiers.put('m', "Multiline"); @@ -640,6 +646,10 @@ public class CSharpNetCoreClientCodegen extends AbstractCSharpCodegen { this.validatable = validatable; } + public void setCaseInsensitiveResponseHeaders(final Boolean caseInsensitiveResponseHeaders) { + this.caseInsensitiveResponseHeaders = caseInsensitiveResponseHeaders; + } + @Override public String toEnumVarName(String value, String datatype) { if (value.length() == 0) { diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/ApiClient.mustache index 55b3e96c4c7..9d177d2c40e 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/ApiClient.mustache @@ -347,7 +347,7 @@ namespace {{packageName}}.Client private ApiResponse toApiResponse({{#supportsAsync}}IRestResponse response{{/supportsAsync}}{{^supportsAsync}}IRestResponse response, CustomJsonCodec des{{/supportsAsync}}) { T result = {{#supportsAsync}}response.Data{{/supportsAsync}}{{^supportsAsync}}(T)des.Deserialize(response, typeof(T)){{/supportsAsync}}; - var transformed = new ApiResponse(response.StatusCode, new Multimap(), result) + var transformed = new ApiResponse(response.StatusCode, new Multimap({{#caseInsensitiveResponseHeaders}}StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), result) { ErrorText = response.ErrorMessage, Cookies = new List() diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/Multimap.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/Multimap.mustache index 30b0c5be86c..a54be5b2ade 100755 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/Multimap.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/Multimap.mustache @@ -21,6 +21,26 @@ namespace {{packageName}}.Client #endregion Private Fields + #region Constructors + + /// + /// Empty Constructor. + /// + public Multimap() + { + _dictionary = new {{^net35}}Concurrent{{/net35}}Dictionary>(); + } + + /// + /// Constructor with comparer. + /// + /// + public Multimap(IEqualityComparer comparer) { + _dictionary = new {{^net35}}Concurrent{{/net35}}Dictionary>(comparer); + } + + #endregion Constructors + #region Enumerators /// diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs index 10bee4636d1..0e4f542eaeb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs @@ -30,6 +30,26 @@ namespace Org.OpenAPITools.Client #endregion Private Fields + #region Constructors + + /// + /// Empty Constructor. + /// + public Multimap() + { + _dictionary = new ConcurrentDictionary>(); + } + + /// + /// Constructor with comparer. + /// + /// + public Multimap(IEqualityComparer comparer) { + _dictionary = new ConcurrentDictionary>(comparer); + } + + #endregion Constructors + #region Enumerators /// diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/src/Org.OpenAPITools/Client/Multimap.cs b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/src/Org.OpenAPITools/Client/Multimap.cs index 10bee4636d1..0e4f542eaeb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/src/Org.OpenAPITools/Client/Multimap.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/src/Org.OpenAPITools/Client/Multimap.cs @@ -30,6 +30,26 @@ namespace Org.OpenAPITools.Client #endregion Private Fields + #region Constructors + + /// + /// Empty Constructor. + /// + public Multimap() + { + _dictionary = new ConcurrentDictionary>(); + } + + /// + /// Constructor with comparer. + /// + /// + public Multimap(IEqualityComparer comparer) { + _dictionary = new ConcurrentDictionary>(comparer); + } + + #endregion Constructors + #region Enumerators ///