12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
+ using System . Net ;
15
16
using RestSharp . Extensions ;
16
17
17
18
namespace RestSharp ;
@@ -32,7 +33,7 @@ public async Task<RestResponse> ExecuteAsync(RestRequest request, CancellationTo
32
33
internalResponse . ResponseMessage ! ,
33
34
request ,
34
35
Options . Encoding ,
35
- CookieContainer . GetCookies ( internalResponse . Url ) ,
36
+ request . CookieContainer ! . GetCookies ( internalResponse . Url ) ,
36
37
CalculateResponseStatus ,
37
38
cancellationToken
38
39
)
@@ -50,8 +51,7 @@ async Task<InternalResponse> ExecuteInternal(RestRequest request, CancellationTo
50
51
51
52
using var requestContent = new RequestContent ( this , request ) ;
52
53
53
- if ( Authenticator != null )
54
- await Authenticator . Authenticate ( this , request ) . ConfigureAwait ( false ) ;
54
+ if ( Authenticator != null ) await Authenticator . Authenticate ( this , request ) . ConfigureAwait ( false ) ;
55
55
56
56
var httpMethod = AsHttpMethod ( request . Method ) ;
57
57
var url = BuildUri ( request ) ;
@@ -61,22 +61,31 @@ async Task<InternalResponse> ExecuteInternal(RestRequest request, CancellationTo
61
61
62
62
using var timeoutCts = new CancellationTokenSource ( request . Timeout > 0 ? request . Timeout : int . MaxValue ) ;
63
63
using var cts = CancellationTokenSource . CreateLinkedTokenSource ( timeoutCts . Token , cancellationToken ) ;
64
- var ct = cts . Token ;
64
+
65
+ var ct = cts . Token ;
65
66
66
67
try {
68
+ // Make sure we have a cookie container if not provided in the request
69
+ var cookieContainer = request . CookieContainer ??= new CookieContainer ( ) ;
67
70
var headers = new RequestHeaders ( )
68
71
. AddHeaders ( request . Parameters )
69
72
. AddHeaders ( DefaultParameters )
70
- . AddAcceptHeader ( AcceptedContentTypes ) ;
73
+ . AddAcceptHeader ( AcceptedContentTypes )
74
+ . AddCookieHeaders ( cookieContainer , url ) ;
71
75
message . AddHeaders ( headers ) ;
72
76
73
- if ( request . OnBeforeRequest != null )
74
- await request . OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
77
+ if ( request . OnBeforeRequest != null ) await request . OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
75
78
76
79
var responseMessage = await HttpClient . SendAsync ( message , request . CompletionOption , ct ) . ConfigureAwait ( false ) ;
77
80
78
- if ( request . OnAfterRequest != null )
79
- await request . OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
81
+ // Parse all the cookies from the response and update the cookie jar with cookies
82
+ if ( responseMessage . Headers . TryGetValues ( "Set-Cookie" , out var cookiesHeader ) ) {
83
+ foreach ( var header in cookiesHeader ) {
84
+ cookieContainer . SetCookies ( url , header ) ;
85
+ }
86
+ }
87
+
88
+ if ( request . OnAfterRequest != null ) await request . OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
80
89
81
90
return new InternalResponse ( responseMessage , url , null , timeoutCts . Token ) ;
82
91
}
@@ -99,8 +108,10 @@ record InternalResponse(HttpResponseMessage? ResponseMessage, Uri Url, Exception
99
108
request . CompletionOption = HttpCompletionOption . ResponseHeadersRead ;
100
109
var response = await ExecuteInternal ( request , cancellationToken ) . ConfigureAwait ( false ) ;
101
110
102
- if ( response . Exception != null ) {
103
- return Options . ThrowOnAnyError ? throw response . Exception : null ;
111
+ var exception = response . Exception ?? response . ResponseMessage ? . MaybeException ( ) ;
112
+
113
+ if ( exception != null ) {
114
+ return Options . ThrowOnAnyError ? throw exception : null ;
104
115
}
105
116
106
117
if ( response . ResponseMessage == null ) return null ;
@@ -141,7 +152,7 @@ static HttpMethod AsHttpMethod(Method method)
141
152
#if NETSTANDARD || NETFRAMEWORK
142
153
Method . Patch => new HttpMethod ( "PATCH" ) ,
143
154
#else
144
- Method . Patch => HttpMethod. Patch ,
155
+ Method . Patch => HttpMethod. Patch ,
145
156
#endif
146
157
Method. Merge => new HttpMethod ( "MERGE" ) ,
147
158
Method . Copy => new HttpMethod ( "COPY" ) ,
@@ -157,11 +168,11 @@ public static RestResponse ThrowIfError(this RestResponse response) {
157
168
158
169
return response ;
159
170
}
160
-
171
+
161
172
public static RestResponse < T > ThrowIfError < T > ( this RestResponse < T > response ) {
162
173
var exception = response . GetException ( ) ;
163
174
if ( exception != null ) throw exception ;
164
175
165
176
return response ;
166
177
}
167
- }
178
+ }
0 commit comments