Skip to content

Commit 40ec016

Browse files
saigiridhar21wing328
authored andcommitted
[csharp] Make API response headers dictionary case insensitive (#2998)
* fix(response-headers): Making response headers case insensitive * fix(response-headers): Making response headers case insensitive * feat(csharp): Headers case insensitive * feat(csharp): Making API response's headers case-insensitive * feat(csharp): Indentation fix * feat(csharp): Indentation fix * feat(csharp): Adding generator's documentation
1 parent 7756296 commit 40ec016

File tree

4 files changed

+18
-4
lines changed

4 files changed

+18
-4
lines changed

docs/generators/csharp.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@ sidebar_label: csharp
2828
|netCoreProjectFile|Use the new format (.NET Core) for .NET project files (.csproj).| |false|
2929
|validatable|Generates self-validatable models.| |true|
3030
|useCompareNetObjects|Use KellermanSoftware.CompareNetObjects for deep recursive object comparison. WARNING: this option incurs potential performance impact.| |false|
31+
|caseInsensitiveResponseHeaders|Make API response's headers case-insensitive| |false|

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case,
232232
public static final String PARCELIZE_MODELS = "parcelizeModels";
233233
public static final String PARCELIZE_MODELS_DESC = "toggle \"@Parcelize\" for generated models";
234234

235+
public static final String CASE_INSENSITIVE_RESPONSE_HEADERS = "caseInsensitiveResponseHeaders";
236+
public static final String CASE_INSENSITIVE_RESPONSE_HEADERS_DESC = "Make API response's headers case-insensitive";
235237

236238
// Not user-configurable. System provided for use in templates.
237239

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
7373
// use KellermanSoftware.CompareNetObjects for deep recursive object comparision
7474
protected boolean useCompareNetObjects = Boolean.FALSE;
7575

76+
// To make API response's headers dictionary case insensitive
77+
protected boolean caseInsensitiveResponseHeaders = Boolean.FALSE;
78+
7679
public CSharpClientCodegen() {
7780
super();
7881
supportsInheritance = true;
@@ -199,6 +202,10 @@ public CSharpClientCodegen() {
199202
CodegenConstants.USE_COMPARE_NET_OBJECTS_DESC,
200203
this.useCompareNetObjects);
201204

205+
addSwitch(CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS,
206+
CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS_DESC,
207+
this.caseInsensitiveResponseHeaders);
208+
202209
regexModifiers = new HashMap<Character, String>();
203210
regexModifiers.put('i', "IgnoreCase");
204211
regexModifiers.put('m', "Multiline");
@@ -802,6 +809,10 @@ public void setUseCompareNetObjects(final Boolean useCompareNetObjects) {
802809
this.useCompareNetObjects = useCompareNetObjects;
803810
}
804811

812+
public void setCaseInsensitiveResponseHeaders(final Boolean caseInsensitiveResponseHeaders) {
813+
this.caseInsensitiveResponseHeaders = caseInsensitiveResponseHeaders;
814+
}
815+
805816
public boolean isNonPublicApi() {
806817
return nonPublicApi;
807818
}

modules/openapi-generator/src/main/resources/csharp/api.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,12 +308,12 @@ namespace {{packageName}}.{{apiPackage}}
308308

309309
{{#returnType}}
310310
return new ApiResponse<{{{returnType}}}>(localVarStatusCode,
311-
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)),
311+
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}),
312312
({{{returnType}}}) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof({{#returnContainer}}{{{returnContainer}}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}})));
313313
{{/returnType}}
314314
{{^returnType}}
315315
return new ApiResponse<Object>(localVarStatusCode,
316-
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)),
316+
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}),
317317
null);
318318
{{/returnType}}
319319
}
@@ -444,12 +444,12 @@ namespace {{packageName}}.{{apiPackage}}
444444

445445
{{#returnType}}
446446
return new ApiResponse<{{{returnType}}}>(localVarStatusCode,
447-
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)),
447+
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}),
448448
({{{returnType}}}) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof({{#returnContainer}}{{{returnContainer}}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}})));
449449
{{/returnType}}
450450
{{^returnType}}
451451
return new ApiResponse<Object>(localVarStatusCode,
452-
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)),
452+
localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}),
453453
null);
454454
{{/returnType}}
455455
}

0 commit comments

Comments
 (0)