@@ -94,26 +94,12 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
94
94
using var cts = CancellationTokenSource . CreateLinkedTokenSource ( timeoutCts . Token , cancellationToken ) ;
95
95
96
96
var ct = cts . Token ;
97
-
98
-
99
- HttpResponseMessage ? responseMessage ;
100
- // Make sure we have a cookie container if not provided in the request
101
- CookieContainer cookieContainer = request . CookieContainer ??= new CookieContainer ( ) ;
102
97
103
- var headers = new RequestHeaders ( )
104
- . AddHeaders ( request . Parameters )
105
- . AddHeaders ( DefaultParameters )
106
- . AddAcceptHeader ( AcceptedContentTypes )
107
- . AddCookieHeaders ( url , cookieContainer )
108
- . AddCookieHeaders ( url , Options . CookieContainer ) ;
98
+ HttpResponseMessage ? responseMessage = null ;
99
+ var cookieContainer = request . CookieContainer ??= new CookieContainer ( ) ;
109
100
110
- message . AddHeaders ( headers ) ;
111
- if ( request . OnBeforeRequest != null ) await request . OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
112
- await OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
113
-
114
101
try {
115
102
// Make sure we have a cookie container if not provided in the request
116
- var cookieContainer = request . CookieContainer ??= new CookieContainer ( ) ;
117
103
118
104
var headers = new RequestHeaders ( )
119
105
. AddHeaders ( request . Parameters )
@@ -123,7 +109,6 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
123
109
. AddCookieHeaders ( url , Options . CookieContainer ) ;
124
110
125
111
bool foundCookies = false ;
126
- HttpResponseMessage ? responseMessage = null ;
127
112
128
113
do {
129
114
using var requestContent = new RequestContent ( this , request ) ;
@@ -137,10 +122,12 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
137
122
using var message = PrepareRequestMessage ( httpMethod , url , content , headers ) ;
138
123
139
124
if ( request . OnBeforeRequest != null ) await request . OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
125
+ await OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
140
126
141
127
responseMessage = await HttpClient . SendAsync ( message , request . CompletionOption , ct ) . ConfigureAwait ( false ) ;
142
128
143
129
if ( request . OnAfterRequest != null ) await request . OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
130
+ await OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
144
131
145
132
if ( ! IsRedirect ( Options . RedirectOptions , responseMessage ) ) {
146
133
break ;
@@ -171,15 +158,17 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
171
158
172
159
// Disallow automatic redirection from secure to non-secure schemes
173
160
// based on the option setting:
174
- if ( HttpUtilities . IsSupportedSecureScheme ( requestUri . Scheme )
161
+ if ( HttpUtilities . IsSupportedSecureScheme ( originalUrl . Scheme )
175
162
&& ! HttpUtilities . IsSupportedSecureScheme ( location . Scheme )
176
163
&& ! Options . RedirectOptions . FollowRedirectsToInsecure ) {
177
164
// TODO: Log here...
178
165
break ;
179
166
}
180
167
181
- if ( responseMessage . StatusCode == HttpStatusCode . RedirectMethod ) {
182
- // TODO: Add RedirectionOptions property for this decision:
168
+ // This is the expected behavior for this status code, but
169
+ // ignore it if requested from the RedirectOptions:
170
+ if ( responseMessage . StatusCode == HttpStatusCode . RedirectMethod
171
+ && Options . RedirectOptions . AllowRedirectMethodStatusCodeToAlterVerb ) {
183
172
httpMethod = HttpMethod . Get ;
184
173
}
185
174
@@ -199,10 +188,8 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
199
188
if ( ! Options . RedirectOptions . ForceForwardBody ) {
200
189
// HttpClient RedirectHandler sets request.Content to null here:
201
190
message . Content = null ;
202
- // HttpClient Redirect handler also does this:
203
- //if (message.Headers.TansferEncodingChunked == true) {
204
- // request.Headers.TransferEncodingChunked = false;
205
- //}
191
+ // HttpClient Redirect handler also foribly removes
192
+ // a Transfer-Encoding of chunked in this case.
206
193
Parameter ? transferEncoding = request . Parameters . TryFind ( KnownHeaders . TransferEncoding ) ;
207
194
if ( transferEncoding != null
208
195
&& transferEncoding . Type == ParameterType . HttpHeader
@@ -237,7 +224,6 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
237
224
if ( request . OnAfterRequest != null ) await request . OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
238
225
await OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
239
226
return new HttpResponse ( responseMessage , url , cookieContainer , null , timeoutCts . Token ) ;
240
-
241
227
}
242
228
243
229
/// <summary>
0 commit comments