Skip to content

Commit ff0fe26

Browse files
authored
Fixes body of FormParameters in multipart/form-data requests without files sent by generated C# (RestSharp) (#20351)
* fix: set RestRequest flag to force multipart/form-data when given as Content-Type * fix: removed serialization of FormParameters for multipart/form-data * updated csharp-restsharp samples
1 parent ab8d359 commit ff0fe26

File tree

67 files changed

+448
-11
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+448
-11
lines changed

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

+8
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,14 @@ namespace {{packageName}}.Client
384384
}
385385
}
386386
387+
if (options.HeaderParameters != null)
388+
{
389+
if (options.HeaderParameters.TryGetValue("Content-Type", out var contentTypes) && contentTypes.Any(header => header.Contains("multipart/form-data")))
390+
{
391+
request.AlwaysMultipartFormData = true;
392+
}
393+
}
394+
387395
return request;
388396
}
389397

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ namespace {{packageName}}.{{apiPackage}}
290290
};
291291

292292
var localVarContentType = {{packageName}}.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
293+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
293294
if (localVarContentType != null)
294295
{
295296
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -375,7 +376,7 @@ namespace {{packageName}}.{{apiPackage}}
375376
{{/isArray}}
376377
{{/isFile}}
377378
{{^isFile}}
378-
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.{{#isPrimitiveType}}ParameterToString{{/isPrimitiveType}}{{^isPrimitiveType}}Serialize{{/isPrimitiveType}}({{paramName}})); // form parameter
379+
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{#isPrimitiveType}}{{packageName}}.Client.ClientUtils.ParameterToString({{paramName}}){{/isPrimitiveType}}{{^isPrimitiveType}}localVarMultipartFormData ? {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}}) : {{packageName}}.Client.ClientUtils.Serialize({{paramName}}){{/isPrimitiveType}}); // form parameter
379380
{{/isFile}}
380381
{{/required}}
381382
{{^required}}
@@ -397,7 +398,7 @@ namespace {{packageName}}.{{apiPackage}}
397398
{{/isArray}}
398399
{{/isFile}}
399400
{{^isFile}}
400-
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.{{#isPrimitiveType}}ParameterToString{{/isPrimitiveType}}{{^isPrimitiveType}}Serialize{{/isPrimitiveType}}({{paramName}})); // form parameter
401+
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{#isPrimitiveType}}{{packageName}}.Client.ClientUtils.ParameterToString({{paramName}}){{/isPrimitiveType}}{{^isPrimitiveType}}localVarMultipartFormData ? {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}}) : {{packageName}}.Client.ClientUtils.Serialize({{paramName}}){{/isPrimitiveType}}); // form parameter
401402
{{/isFile}}
402403
}
403404
{{/required}}

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Api/AuthApi.cs

+2
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestAuthHttpBasicWithHttpInfo
274274
};
275275

276276
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
277+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
277278
if (localVarContentType != null)
278279
{
279280
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -412,6 +413,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestAuthHttpBearerWithHttpInf
412413
};
413414

414415
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
416+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
415417
if (localVarContentType != null)
416418
{
417419
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Api/BodyApi.cs

+10
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,7 @@ public System.IO.Stream TestBinaryGif(int operationIndex = 0)
663663
};
664664

665665
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
666+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
666667
if (localVarContentType != null)
667668
{
668669
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -792,6 +793,7 @@ public System.IO.Stream TestBinaryGif(int operationIndex = 0)
792793
};
793794

794795
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
796+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
795797
if (localVarContentType != null)
796798
{
797799
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -932,6 +934,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
932934
};
933935

934936
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
937+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
935938
if (localVarContentType != null)
936939
{
937940
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1078,6 +1081,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
10781081
};
10791082

10801083
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1084+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
10811085
if (localVarContentType != null)
10821086
{
10831087
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1218,6 +1222,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
12181222
};
12191223

12201224
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1225+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
12211226
if (localVarContentType != null)
12221227
{
12231228
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1352,6 +1357,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
13521357
};
13531358

13541359
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1360+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
13551361
if (localVarContentType != null)
13561362
{
13571363
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1486,6 +1492,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
14861492
};
14871493

14881494
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1495+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
14891496
if (localVarContentType != null)
14901497
{
14911498
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1620,6 +1627,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
16201627
};
16211628

16221629
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1630+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
16231631
if (localVarContentType != null)
16241632
{
16251633
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1754,6 +1762,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
17541762
};
17551763

17561764
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1765+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
17571766
if (localVarContentType != null)
17581767
{
17591768
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1888,6 +1897,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestBodyMultipartFormdataArra
18881897
};
18891898

18901899
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1900+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
18911901
if (localVarContentType != null)
18921902
{
18931903
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Api/FormApi.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
366366
};
367367

368368
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
369+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
369370
if (localVarContentType != null)
370371
{
371372
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -532,6 +533,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestFormObjectMultipartWithHt
532533
};
533534

534535
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
536+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
535537
if (localVarContentType != null)
536538
{
537539
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -543,7 +545,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestFormObjectMultipartWithHt
543545
localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
544546
}
545547

546-
localVarRequestOptions.FormParameters.Add("marker", Org.OpenAPITools.Client.ClientUtils.Serialize(marker)); // form parameter
548+
localVarRequestOptions.FormParameters.Add("marker", localVarMultipartFormData ? Org.OpenAPITools.Client.ClientUtils.ParameterToString(marker) : Org.OpenAPITools.Client.ClientUtils.Serialize(marker)); // form parameter
547549

548550
localVarRequestOptions.Operation = "FormApi.TestFormObjectMultipart";
549551
localVarRequestOptions.OperationIndex = operationIndex;
@@ -682,6 +684,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestFormObjectMultipartWithHt
682684
};
683685

684686
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
687+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
685688
if (localVarContentType != null)
686689
{
687690
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Api/HeaderApi.cs

+1
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
261261
};
262262

263263
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
264+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
264265
if (localVarContentType != null)
265266
{
266267
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Api/PathApi.cs

+1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ public Org.OpenAPITools.Client.ApiResponse<string> TestsPathStringPathStringInte
267267
};
268268

269269
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
270+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
270271
if (localVarContentType != null)
271272
{
272273
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Api/QueryApi.cs

+10
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
691691
};
692692

693693
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
694+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
694695
if (localVarContentType != null)
695696
{
696697
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -843,6 +844,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
843844
};
844845

845846
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
847+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
846848
if (localVarContentType != null)
847849
{
848850
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1005,6 +1007,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
10051007
};
10061008

10071009
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1010+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
10081011
if (localVarContentType != null)
10091012
{
10101013
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1163,6 +1166,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
11631166
};
11641167

11651168
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1169+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
11661170
if (localVarContentType != null)
11671171
{
11681172
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1347,6 +1351,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
13471351
};
13481352

13491353
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1354+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
13501355
if (localVarContentType != null)
13511356
{
13521357
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1483,6 +1488,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
14831488
};
14841489

14851490
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1491+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
14861492
if (localVarContentType != null)
14871493
{
14881494
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1621,6 +1627,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
16211627
};
16221628

16231629
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1630+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
16241631
if (localVarContentType != null)
16251632
{
16261633
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1759,6 +1766,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
17591766
};
17601767

17611768
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1769+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
17621770
if (localVarContentType != null)
17631771
{
17641772
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -1897,6 +1905,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
18971905
};
18981906

18991907
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
1908+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
19001909
if (localVarContentType != null)
19011910
{
19021911
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -2035,6 +2044,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
20352044
};
20362045

20372046
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
2047+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
20382048
if (localVarContentType != null)
20392049
{
20402050
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Client/ApiClient.cs

+8
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,14 @@ private RestRequest NewRequest(
384384
}
385385
}
386386

387+
if (options.HeaderParameters != null)
388+
{
389+
if (options.HeaderParameters.TryGetValue("Content-Type", out var contentTypes) && contentTypes.Any(header => header.Contains("multipart/form-data")))
390+
{
391+
request.AlwaysMultipartFormData = true;
392+
}
393+
}
394+
387395
return request;
388396
}
389397

samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Api/MultipartApi.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
343343
};
344344

345345
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
346+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
346347
if (localVarContentType != null)
347348
{
348349
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -497,6 +498,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
497498
};
498499

499500
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
501+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
500502
if (localVarContentType != null)
501503
{
502504
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
@@ -511,12 +513,12 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
511513
localVarRequestOptions.FormParameters.Add("status", Org.OpenAPITools.Client.ClientUtils.ParameterToString(status)); // form parameter
512514
if (marker != null)
513515
{
514-
localVarRequestOptions.FormParameters.Add("marker", Org.OpenAPITools.Client.ClientUtils.Serialize(marker)); // form parameter
516+
localVarRequestOptions.FormParameters.Add("marker", localVarMultipartFormData ? Org.OpenAPITools.Client.ClientUtils.ParameterToString(marker) : Org.OpenAPITools.Client.ClientUtils.Serialize(marker)); // form parameter
515517
}
516518
localVarRequestOptions.FileParameters.Add("file", file);
517519
if (statusArray != null)
518520
{
519-
localVarRequestOptions.FormParameters.Add("statusArray", Org.OpenAPITools.Client.ClientUtils.Serialize(statusArray)); // form parameter
521+
localVarRequestOptions.FormParameters.Add("statusArray", localVarMultipartFormData ? Org.OpenAPITools.Client.ClientUtils.ParameterToString(statusArray) : Org.OpenAPITools.Client.ClientUtils.Serialize(statusArray)); // form parameter
520522
}
521523

522524
localVarRequestOptions.Operation = "MultipartApi.MultipartMixed";
@@ -657,6 +659,7 @@ public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory
657659
};
658660

659661
var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
662+
var localVarMultipartFormData = localVarContentType == "multipart/form-data";
660663
if (localVarContentType != null)
661664
{
662665
localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);

samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Client/ApiClient.cs

+8
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,14 @@ private RestRequest NewRequest(
384384
}
385385
}
386386

387+
if (options.HeaderParameters != null)
388+
{
389+
if (options.HeaderParameters.TryGetValue("Content-Type", out var contentTypes) && contentTypes.Any(header => header.Contains("multipart/form-data")))
390+
{
391+
request.AlwaysMultipartFormData = true;
392+
}
393+
}
394+
387395
return request;
388396
}
389397

0 commit comments

Comments
 (0)