Skip to content

Commit 16a7188

Browse files
dameng324baronfel
authored andcommitted
fix port error when fallback to http
1 parent 74a8d17 commit 16a7188

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/Containers/Microsoft.NET.Build.Containers/FallbackToHttpMessageHandler.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ namespace Microsoft.NET.Build.Containers;
1212
/// </summary>
1313
internal sealed partial class FallbackToHttpMessageHandler : DelegatingHandler
1414
{
15+
private readonly string _registeryName;
1516
private readonly string _host;
1617
private readonly int _port;
1718
private readonly ILogger _logger;
1819
private bool _fallbackToHttp;
1920

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)
2123
{
24+
_registeryName = registryName;
2225
_host = host;
2326
_port = port;
2427
_logger = logger;
@@ -38,7 +41,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
3841
{
3942
if (canFallback && _fallbackToHttp)
4043
{
41-
FallbackToHttp(request);
44+
FallbackToHttp(_registeryName, request);
4245
canFallback = false;
4346
}
4447

@@ -51,7 +54,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
5154
{
5255
// Try falling back.
5356
_logger.LogTrace("Attempt to fall back to http for {uri}.", uri);
54-
FallbackToHttp(request);
57+
FallbackToHttp(_registeryName, request);
5558
HttpResponseMessage response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
5659

5760
// Fall back was successful. Use http for all new requests.
@@ -76,10 +79,16 @@ internal static bool ShouldAttemptFallbackToHttp(HttpRequestException exception)
7679
return exception.HttpRequestError == HttpRequestError.SecureConnectionError;
7780
}
7881

79-
private static void FallbackToHttp(HttpRequestMessage request)
82+
private static void FallbackToHttp(string registryName, HttpRequestMessage request)
8083
{
8184
var uriBuilder = new UriBuilder(request.RequestUri!);
8285
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+
8392
request.RequestUri = uriBuilder.Uri;
8493
}
8594
}

src/Containers/Microsoft.NET.Build.Containers/Registry/DefaultRegistryAPI.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ internal DefaultRegistryAPI(string registryName, Uri baseUri, bool isInsecureReg
3737

3838
private static HttpClient CreateClient(string registryName, Uri baseUri, ILogger logger, bool isInsecureRegistry, RegistryMode mode)
3939
{
40-
HttpMessageHandler innerHandler = CreateHttpHandler(baseUri, isInsecureRegistry, logger);
40+
HttpMessageHandler innerHandler = CreateHttpHandler(registryName, baseUri, isInsecureRegistry, logger);
4141

4242
HttpMessageHandler clientHandler = new AuthHandshakeMessageHandler(registryName, innerHandler, logger, mode);
4343

@@ -56,7 +56,7 @@ private static HttpClient CreateClient(string registryName, Uri baseUri, ILogger
5656
return client;
5757
}
5858

59-
private static HttpMessageHandler CreateHttpHandler(Uri baseUri, bool allowInsecure, ILogger logger)
59+
private static HttpMessageHandler CreateHttpHandler(string registryName, Uri baseUri, bool allowInsecure, ILogger logger)
6060
{
6161
var socketsHttpHandler = new SocketsHttpHandler()
6262
{
@@ -75,7 +75,7 @@ private static HttpMessageHandler CreateHttpHandler(Uri baseUri, bool allowInsec
7575
RemoteCertificateValidationCallback = IgnoreCertificateErrorsForSpecificHost(baseUri.Host)
7676
};
7777

78-
return new FallbackToHttpMessageHandler(baseUri.Host, baseUri.Port, socketsHttpHandler, logger);
78+
return new FallbackToHttpMessageHandler(registryName, baseUri.Host, baseUri.Port, socketsHttpHandler, logger);
7979
}
8080

8181
private static RemoteCertificateValidationCallback IgnoreCertificateErrorsForSpecificHost(string host)

0 commit comments

Comments
 (0)