@@ -12,13 +12,16 @@ namespace Microsoft.NET.Build.Containers;
12
12
/// </summary>
13
13
internal sealed partial class FallbackToHttpMessageHandler : DelegatingHandler
14
14
{
15
+ private readonly string _registeryName ;
15
16
private readonly string _host ;
16
17
private readonly int _port ;
17
18
private readonly ILogger _logger ;
18
19
private bool _fallbackToHttp ;
19
20
20
- public FallbackToHttpMessageHandler ( string host , int port , HttpMessageHandler innerHandler , ILogger logger ) : base ( innerHandler )
21
+ public FallbackToHttpMessageHandler ( string registryName , string host , int port , HttpMessageHandler innerHandler , ILogger logger )
22
+ : base ( innerHandler )
21
23
{
24
+ _registeryName = registryName ;
22
25
_host = host ;
23
26
_port = port ;
24
27
_logger = logger ;
@@ -38,7 +41,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
38
41
{
39
42
if ( canFallback && _fallbackToHttp )
40
43
{
41
- FallbackToHttp ( request ) ;
44
+ FallbackToHttp ( _registeryName , request ) ;
42
45
canFallback = false ;
43
46
}
44
47
@@ -51,7 +54,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
51
54
{
52
55
// Try falling back.
53
56
_logger . LogTrace ( "Attempt to fall back to http for {uri}." , uri ) ;
54
- FallbackToHttp ( request ) ;
57
+ FallbackToHttp ( _registeryName , request ) ;
55
58
HttpResponseMessage response = await base . SendAsync ( request , cancellationToken ) . ConfigureAwait ( false ) ;
56
59
57
60
// Fall back was successful. Use http for all new requests.
@@ -76,10 +79,16 @@ internal static bool ShouldAttemptFallbackToHttp(HttpRequestException exception)
76
79
return exception . HttpRequestError == HttpRequestError . SecureConnectionError ;
77
80
}
78
81
79
- private static void FallbackToHttp ( HttpRequestMessage request )
82
+ private static void FallbackToHttp ( string registryName , HttpRequestMessage request )
80
83
{
81
84
var uriBuilder = new UriBuilder ( request . RequestUri ! ) ;
82
85
uriBuilder . Scheme = "http" ;
86
+ if ( registryName . IndexOf ( ':' ) < 0 )
87
+ {
88
+ // registeryName does not contains port number, so reset the port number to -1, otherwise it will be https default port 443
89
+ uriBuilder . Port = - 1 ;
90
+ }
91
+
83
92
request . RequestUri = uriBuilder . Uri ;
84
93
}
85
94
}
0 commit comments