@@ -15,13 +15,15 @@ public static class HttpClientExtension
1515 /// <param name="requestUri">The request Uri</param>
1616 /// <param name="content">The http content</param>
1717 /// <param name="platformAccessToken">The platformAccess tokens</param>
18+ /// <param name="cancellationToken">The cancellation token</param>
1819 /// <returns>A HttpResponseMessage</returns>
1920 public static async Task < HttpResponseMessage > PostAsync (
2021 this HttpClient httpClient ,
2122 string authorizationToken ,
2223 string requestUri ,
2324 HttpContent ? content ,
24- string ? platformAccessToken = null
25+ string ? platformAccessToken = null ,
26+ CancellationToken cancellationToken = default
2527 )
2628 {
2729 using HttpRequestMessage request = new ( HttpMethod . Post , requestUri ) ;
@@ -37,7 +39,7 @@ public static async Task<HttpResponseMessage> PostAsync(
3739 request . Headers . Add ( Constants . General . PlatformAccessTokenHeaderName , platformAccessToken ) ;
3840 }
3941
40- return await httpClient . SendAsync ( request , CancellationToken . None ) ;
42+ return await httpClient . SendAsync ( request , cancellationToken ) ;
4143 }
4244
4345 /// <summary>
@@ -48,13 +50,15 @@ public static async Task<HttpResponseMessage> PostAsync(
4850 /// <param name="requestUri">The request Uri</param>
4951 /// <param name="content">The http content</param>
5052 /// <param name="platformAccessToken">The platformAccess tokens</param>
53+ /// <param name="cancellationToken">The cancellation token</param>
5154 /// <returns>A HttpResponseMessage</returns>
5255 public static async Task < HttpResponseMessage > PutAsync (
5356 this HttpClient httpClient ,
5457 string authorizationToken ,
5558 string requestUri ,
5659 HttpContent ? content ,
57- string ? platformAccessToken = null
60+ string ? platformAccessToken = null ,
61+ CancellationToken cancellationToken = default
5862 )
5963 {
6064 using HttpRequestMessage request = new ( HttpMethod . Put , requestUri ) ;
@@ -70,7 +74,7 @@ public static async Task<HttpResponseMessage> PutAsync(
7074 request . Headers . Add ( Constants . General . PlatformAccessTokenHeaderName , platformAccessToken ) ;
7175 }
7276
73- return await httpClient . SendAsync ( request , CancellationToken . None ) ;
77+ return await httpClient . SendAsync ( request , cancellationToken ) ;
7478 }
7579
7680 /// <summary>
@@ -80,12 +84,14 @@ public static async Task<HttpResponseMessage> PutAsync(
8084 /// <param name="authorizationToken">the authorization token (jwt)</param>
8185 /// <param name="requestUri">The request Uri</param>
8286 /// <param name="platformAccessToken">The platformAccess tokens</param>
87+ /// <param name="cancellationToken">The cancellation token</param>
8388 /// <returns>A HttpResponseMessage</returns>
8489 public static async Task < HttpResponseMessage > GetAsync (
8590 this HttpClient httpClient ,
8691 string authorizationToken ,
8792 string requestUri ,
88- string ? platformAccessToken = null
93+ string ? platformAccessToken = null ,
94+ CancellationToken cancellationToken = default
8995 )
9096 {
9197 using HttpRequestMessage request = new ( HttpMethod . Get , requestUri ) ;
@@ -100,7 +106,42 @@ public static async Task<HttpResponseMessage> GetAsync(
100106 request . Headers . Add ( Constants . General . PlatformAccessTokenHeaderName , platformAccessToken ) ;
101107 }
102108
103- return await httpClient . SendAsync ( request , HttpCompletionOption . ResponseContentRead , CancellationToken . None ) ;
109+ return await httpClient . SendAsync ( request , HttpCompletionOption . ResponseContentRead , cancellationToken ) ;
110+ }
111+
112+ /// <summary>
113+ /// Extension that adds authorization header to request and returns response configured for streaming.
114+ /// Response returns immediately after headers are received, allowing content to be streamed.
115+ /// </summary>
116+ /// <param name="httpClient">The HttpClient</param>
117+ /// <param name="authorizationToken">the authorization token (jwt)</param>
118+ /// <param name="requestUri">The request Uri</param>
119+ /// <param name="platformAccessToken">The platformAccess tokens</param>
120+ /// <param name="cancellationToken">The cancellation token</param>
121+ /// <returns>A HttpResponseMessage</returns>
122+ /// <remarks>When using GetStreamingAsync() for large file downloads, ensure your HttpClient
123+ /// instance has an appropriate timeout configured. The default timeout may be too short for large files.</remarks>
124+ public static async Task < HttpResponseMessage > GetStreamingAsync (
125+ this HttpClient httpClient ,
126+ string authorizationToken ,
127+ string requestUri ,
128+ string ? platformAccessToken = null ,
129+ CancellationToken cancellationToken = default
130+ )
131+ {
132+ using HttpRequestMessage request = new ( HttpMethod . Get , requestUri ) ;
133+
134+ request . Headers . Authorization = new AuthenticationHeaderValue (
135+ Constants . AuthorizationSchemes . Bearer ,
136+ authorizationToken
137+ ) ;
138+
139+ if ( ! string . IsNullOrEmpty ( platformAccessToken ) )
140+ {
141+ request . Headers . Add ( Constants . General . PlatformAccessTokenHeaderName , platformAccessToken ) ;
142+ }
143+
144+ return await httpClient . SendAsync ( request , HttpCompletionOption . ResponseHeadersRead , cancellationToken ) ;
104145 }
105146
106147 /// <summary>
@@ -110,12 +151,14 @@ public static async Task<HttpResponseMessage> GetAsync(
110151 /// <param name="authorizationToken">the authorization token (jwt)</param>
111152 /// <param name="requestUri">The request Uri</param>
112153 /// <param name="platformAccessToken">The platformAccess tokens</param>
154+ /// <param name="cancellationToken">The cancellation token</param>
113155 /// <returns>A HttpResponseMessage</returns>
114156 public static async Task < HttpResponseMessage > DeleteAsync (
115157 this HttpClient httpClient ,
116158 string authorizationToken ,
117159 string requestUri ,
118- string ? platformAccessToken = null
160+ string ? platformAccessToken = null ,
161+ CancellationToken cancellationToken = default
119162 )
120163 {
121164 using HttpRequestMessage request = new ( HttpMethod . Delete , requestUri ) ;
@@ -130,6 +173,6 @@ public static async Task<HttpResponseMessage> DeleteAsync(
130173 request . Headers . Add ( Constants . General . PlatformAccessTokenHeaderName , platformAccessToken ) ;
131174 }
132175
133- return await httpClient . SendAsync ( request , CancellationToken . None ) ;
176+ return await httpClient . SendAsync ( request , cancellationToken ) ;
134177 }
135178}
0 commit comments