@@ -36,38 +36,60 @@ public RequestContent(RestClient client, RestRequest request) {
36
36
_parameters = new RequestParameters ( _request . Parameters . Union ( _client . DefaultParameters ) ) ;
37
37
}
38
38
39
- public HttpContent BuildContent ( ) {
40
- AddFiles ( ) ;
39
+ public HttpContent BuildContent ( )
40
+ {
41
41
var postParameters = _parameters . GetContentParameters ( _request . Method ) . ToArray ( ) ;
42
- AddBody ( postParameters . Length > 0 ) ;
43
- AddPostParameters ( postParameters ) ;
44
- AddHeaders ( ) ;
45
-
46
- return Content ! ;
47
- }
48
-
49
- void AddFiles ( ) {
50
- if ( ! _request . HasFiles ( ) && ! _request . AlwaysMultipartFormData ) return ;
51
-
52
- var mpContent = CreateMultipartFormDataContent ( ) ;
42
+ var postParametersExists = postParameters . Length > 0 ;
43
+ var bodyParametersExists = _request . TryGetBodyParameter ( out var bodyParameter ) ;
44
+ var filesExists = _request . Files . Any ( ) ;
53
45
54
- foreach ( var file in _request . Files ) {
55
- var stream = file . GetFile ( ) ;
56
- _streams . Add ( stream ) ;
57
- var fileContent = new StreamContent ( stream ) ;
46
+ if ( filesExists )
47
+ AddFiles ( ) ;
58
48
59
- fileContent . Headers . ContentType = file . ContentType . AsMediaTypeHeaderValue ;
49
+ if ( bodyParametersExists )
50
+ AddBody ( postParametersExists , bodyParameter ! ) ;
60
51
61
- var dispositionHeader = file . Options . DisableFilenameEncoding
62
- ? ContentDispositionHeaderValue . Parse ( $ "form-data; name=\" { file . Name } \" ; filename=\" { file . FileName } \" ")
63
- : new ContentDispositionHeaderValue ( "form-data" ) { Name = $ "\" { file . Name } \" ", FileName = $ "\" { file . FileName } \" " } ;
64
- if ( ! file . Options . DisableFileNameStar ) dispositionHeader . FileNameStar = file . FileName ;
65
- fileContent . Headers . ContentDisposition = dispositionHeader ;
52
+ if ( postParametersExists )
53
+ AddPostParameters ( postParameters ) ;
66
54
67
- mpContent . Add ( fileContent ) ;
68
- }
55
+ AddHeaders ( ) ;
69
56
70
- Content = mpContent ;
57
+ return Content ! ;
58
+ }
59
+
60
+ void AddFiles ( )
61
+ {
62
+ // File uploading without multipart/form-data
63
+ if ( _request . AlwaysSingleFileAsContent && _request . Files . Count == 1 )
64
+ {
65
+ var fileParameter = _request . Files . First ( ) ;
66
+ Content = ToStreamContent ( fileParameter ) ;
67
+ return ;
68
+ }
69
+
70
+ var mpContent = new MultipartFormDataContent ( GetOrSetFormBoundary ( ) ) ;
71
+
72
+ foreach ( var fileParameter in _request . Files )
73
+ mpContent . Add ( ToStreamContent ( fileParameter ) ) ;
74
+
75
+ Content = mpContent ;
76
+ }
77
+
78
+ StreamContent ToStreamContent ( FileParameter fileParameter )
79
+ {
80
+ var stream = fileParameter . GetFile ( ) ;
81
+ _streams . Add ( stream ) ;
82
+ var streamContent = new StreamContent ( stream ) ;
83
+
84
+ streamContent . Headers . ContentType = fileParameter . ContentType . AsMediaTypeHeaderValue ;
85
+
86
+ var dispositionHeader = fileParameter . Options . DisableFilenameEncoding
87
+ ? ContentDispositionHeaderValue . Parse ( $ "form-data; name=\" { fileParameter . Name } \" ; filename=\" { fileParameter . FileName } \" ")
88
+ : new ContentDispositionHeaderValue ( "form-data" ) { Name = $ "\" { fileParameter . Name } \" ", FileName = $ "\" { fileParameter . FileName } \" " } ;
89
+ if ( ! fileParameter . Options . DisableFileNameStar ) dispositionHeader . FileNameStar = fileParameter . FileName ;
90
+ streamContent . Headers . ContentDisposition = dispositionHeader ;
91
+
92
+ return streamContent ;
71
93
}
72
94
73
95
HttpContent Serialize ( BodyParameter body ) {
@@ -117,9 +139,8 @@ MultipartFormDataContent CreateMultipartFormDataContent() {
117
139
return mpContent ;
118
140
}
119
141
120
- void AddBody ( bool hasPostParameters ) {
121
- if ( ! _request . TryGetBodyParameter ( out var bodyParameter ) ) return ;
122
-
142
+ void AddBody ( bool hasPostParameters , BodyParameter bodyParameter )
143
+ {
123
144
var bodyContent = Serialize ( bodyParameter ) ;
124
145
125
146
// we need to send the body
0 commit comments