@@ -198,16 +198,7 @@ private readonly async Task<UriBuilder> UploadBlobChunked(string name, string di
198
198
throw new ApplicationException ( errorMessage ) ;
199
199
}
200
200
201
- if ( patchResponse . Headers . Location is { IsAbsoluteUri : true } )
202
- {
203
- localUploadUri = new UriBuilder ( patchResponse . Headers . Location ) ;
204
- }
205
- else
206
- {
207
- // if we don't trim the BaseUri and relative Uri of slashes, you can get invalid urls.
208
- // Uri constructor does this on our behalf.
209
- localUploadUri = new UriBuilder ( new Uri ( BaseUri , patchResponse . Headers . Location ? . OriginalString ?? "" ) ) ;
210
- }
201
+ localUploadUri = GetNextLocation ( patchResponse ) ;
211
202
212
203
patchUri = localUploadUri . Uri ;
213
204
@@ -217,13 +208,26 @@ private readonly async Task<UriBuilder> UploadBlobChunked(string name, string di
217
208
return new UriBuilder ( patchUri ) ;
218
209
}
219
210
211
+ private readonly UriBuilder GetNextLocation ( HttpResponseMessage response ) {
212
+ if ( response . Headers . Location is { IsAbsoluteUri : true } )
213
+ {
214
+ return new UriBuilder ( response . Headers . Location ) ;
215
+ }
216
+ else
217
+ {
218
+ // if we don't trim the BaseUri and relative Uri of slashes, you can get invalid urls.
219
+ // Uri constructor does this on our behalf.
220
+ return new UriBuilder ( new Uri ( BaseUri , response . Headers . Location ? . OriginalString ?? "" ) ) ;
221
+ }
222
+ }
223
+
220
224
private readonly async Task < UriBuilder > UploadBlobWhole ( string name , string digest , Stream contents , HttpClient client , UriBuilder uploadUri ) {
221
225
StreamContent content = new StreamContent ( contents ) ;
222
226
content . Headers . ContentType = new MediaTypeHeaderValue ( "application/octet-stream" ) ;
223
227
content . Headers . ContentLength = contents . Length ;
224
228
HttpResponseMessage putResponse = await client . PutAsync ( uploadUri . Uri , content ) ;
225
229
putResponse . EnsureSuccessStatusCode ( ) ;
226
- return new UriBuilder ( putResponse . Headers . Location ?? uploadUri . Uri ) ;
230
+ return GetNextLocation ( putResponse ) ;
227
231
}
228
232
229
233
private readonly async Task < UriBuilder > StartUploadSession ( string name , string digest , HttpClient client ) {
@@ -237,21 +241,12 @@ private readonly async Task<UriBuilder> StartUploadSession(string name, string d
237
241
throw new ApplicationException ( errorMessage ) ;
238
242
}
239
243
240
- if ( pushResponse . Headers . Location is { IsAbsoluteUri : true } )
241
- {
242
- return new UriBuilder ( pushResponse . Headers . Location ) ;
243
- }
244
- else
245
- {
246
- // if we don't trim the BaseUri and relative Uri of slashes, you can get invalid urls.
247
- // Uri constructor does this on our behalf.
248
- return new UriBuilder ( new Uri ( BaseUri , pushResponse . Headers . Location ? . OriginalString ?? "" ) ) ;
249
- }
244
+ return GetNextLocation ( pushResponse ) ;
250
245
}
251
246
252
247
private readonly async Task < UriBuilder > UploadBlobContents ( string name , string digest , Stream contents , HttpClient client , UriBuilder uploadUri ) {
253
- if ( SupportsChunkedUpload ) return await UploadBlobWhole ( name , digest , contents , client , uploadUri ) ;
254
- else return await UploadBlobChunked ( name , digest , contents , client , uploadUri ) ;
248
+ if ( SupportsChunkedUpload ) return await UploadBlobChunked ( name , digest , contents , client , uploadUri ) ;
249
+ else return await UploadBlobWhole ( name , digest , contents , client , uploadUri ) ;
255
250
}
256
251
257
252
private readonly async Task FinishUploadSession ( string digest , HttpClient client , UriBuilder uploadUri ) {
0 commit comments