From a58599b2b4f43a49e9066676ca06c9a89ed4c9e2 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Fri, 11 Nov 2022 13:02:37 +0100 Subject: [PATCH 1/7] IsRedirectCode add 308 --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index 85932f7eb86..4e9e5c0777b 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -1321,6 +1321,8 @@ private static bool IsRedirectCode(HttpStatusCode code) (intCode >= 300 && intCode < 304) || intCode == 307 + || + intCode == 308 ); } From 5dabd70cb488dcfb3f445e3b2bea77350f2162cb Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Fri, 11 Nov 2022 13:06:45 +0100 Subject: [PATCH 2/7] Small cleanup --- .../WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index 4e9e5c0777b..f661f2d4a87 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -1603,16 +1603,11 @@ protected override void ProcessRecord() // Errors with redirection counts of greater than 0 are handled automatically by .NET, but are // impossible to detect programmatically when we hit this limit. By handling this ourselves // (and still writing out the result), users can debug actual HTTP redirect problems. - if (WebSession.MaximumRedirection == 0) // Indicate "HttpClientHandler.AllowAutoRedirect == false" + if (WebSession.MaximumRedirection == 0 && IsRedirectCode(response.StatusCode)) // Indicate "HttpClientHandler.AllowAutoRedirect == false" { - if (response.StatusCode == HttpStatusCode.Found || - response.StatusCode == HttpStatusCode.Moved || - response.StatusCode == HttpStatusCode.MovedPermanently) - { - ErrorRecord er = new(new InvalidOperationException(), "MaximumRedirectExceeded", ErrorCategory.InvalidOperation, request); - er.ErrorDetails = new ErrorDetails(WebCmdletStrings.MaximumRedirectionCountExceeded); - WriteError(er); - } + ErrorRecord er = new(new InvalidOperationException(), "MaximumRedirectExceeded", ErrorCategory.InvalidOperation, request); + er.ErrorDetails = new ErrorDetails(WebCmdletStrings.MaximumRedirectionCountExceeded); + WriteError(er); } } catch (HttpRequestException ex) From 1ecb5f195d66354bacd297802e779b2c48b02e8b Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Fri, 11 Nov 2022 22:29:10 +0100 Subject: [PATCH 3/7] Compacted || --- .../Common/WebRequestPSCmdlet.Common.cs | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index f661f2d4a87..53d5542d256 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -1318,10 +1318,8 @@ private static bool IsRedirectCode(HttpStatusCode code) int intCode = (int)code; return ( - (intCode >= 300 && intCode < 304) - || - intCode == 307 - || + (intCode >= 300 && intCode < 304) || + intCode == 307 || intCode == 308 ); } @@ -1332,18 +1330,12 @@ private static bool IsRedirectToGet(HttpStatusCode code) { return ( - code == HttpStatusCode.Found - || - code == HttpStatusCode.Moved - || - code == HttpStatusCode.Redirect - || - code == HttpStatusCode.RedirectMethod - || - code == HttpStatusCode.SeeOther - || - code == HttpStatusCode.Ambiguous - || + code == HttpStatusCode.Found || + code == HttpStatusCode.Moved || + code == HttpStatusCode.Redirect || + code == HttpStatusCode.RedirectMethod || + code == HttpStatusCode.SeeOther || + code == HttpStatusCode.Ambiguous || code == HttpStatusCode.MultipleChoices ); } From d00c81396a332ddfc1216935f7f2dcbff60b98d7 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Mon, 14 Nov 2022 10:39:24 +0100 Subject: [PATCH 4/7] rewrite shouldretry like isredirectcode --- .../Common/WebRequestPSCmdlet.Common.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index 53d5542d256..c208e543e3c 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -412,8 +412,9 @@ internal virtual void ValidateParameters() // sessions if ((WebSession != null) && (SessionVariable != null)) { - ErrorRecord error = GetValidationError(WebCmdletStrings.SessionConflict, - "WebCmdletSessionConflictException"); + ErrorRecord error = GetValidationError( + WebCmdletStrings.SessionConflict, + "WebCmdletSessionConflictException"); ThrowTerminatingError(error); } @@ -740,7 +741,7 @@ private Uri PrepareUri(Uri uri) LanguagePrimitives.TryConvertTo(Body, out bodyAsDictionary); if ((bodyAsDictionary != null) && ((IsStandardMethodSet() && (Method == WebRequestMethod.Default || Method == WebRequestMethod.Get)) - || (IsCustomMethodSet() && CustomMethod.ToUpperInvariant() == "GET"))) + || (IsCustomMethodSet() && CustomMethod.ToUpperInvariant() == "GET"))) { UriBuilder uriBuilder = new(uri); if (uriBuilder.Query != null && uriBuilder.Query.Length > 1) @@ -1340,16 +1341,14 @@ private static bool IsRedirectToGet(HttpStatusCode code) ); } + // Returns true if the status code shows a server or client error and MaximumRetryCount > 0 private bool ShouldRetry(HttpStatusCode code) { int intCode = (int)code; - - if (((intCode == 304) || (intCode >= 400 && intCode <= 599)) && WebSession.MaximumRetryCount > 0) - { - return true; - } - - return false; + return + ( + ((intCode == 304) || (intCode >= 400 && intCode <= 599)) && WebSession.MaximumRetryCount > 0 + ); } internal virtual HttpResponseMessage GetResponse(HttpClient client, HttpRequestMessage request, bool keepAuthorization) From 0c7ace3912a261123526a6a50b0783238d34ab0d Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Mon, 14 Nov 2022 10:41:50 +0100 Subject: [PATCH 5/7] remove extra () --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index c208e543e3c..f726dfc8a9d 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -1347,7 +1347,7 @@ private bool ShouldRetry(HttpStatusCode code) int intCode = (int)code; return ( - ((intCode == 304) || (intCode >= 400 && intCode <= 599)) && WebSession.MaximumRetryCount > 0 + (intCode == 304 || (intCode >= 400 && intCode <= 599)) && WebSession.MaximumRetryCount > 0 ); } From fb10c706040ee5986259a39b7be176b91a67624a Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Mon, 14 Nov 2022 10:49:55 +0100 Subject: [PATCH 6/7] revert style change --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index f726dfc8a9d..fdc7806dacf 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -412,9 +412,8 @@ internal virtual void ValidateParameters() // sessions if ((WebSession != null) && (SessionVariable != null)) { - ErrorRecord error = GetValidationError( - WebCmdletStrings.SessionConflict, - "WebCmdletSessionConflictException"); + ErrorRecord error = GetValidationError(WebCmdletStrings.SessionConflict, + "WebCmdletSessionConflictException"); ThrowTerminatingError(error); } @@ -422,7 +421,7 @@ internal virtual void ValidateParameters() if (UseDefaultCredentials && (Authentication != WebAuthenticationType.None)) { ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationConflict, - "WebCmdletAuthenticationConflictException"); + "WebCmdletAuthenticationConflictException"); ThrowTerminatingError(error); } From e7fcf996b7dccc0e86ee7ea3f1c2c1c593aca265 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Mon, 14 Nov 2022 10:52:50 +0100 Subject: [PATCH 7/7] fix spaces --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs index fdc7806dacf..21be97d567e 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs @@ -413,7 +413,7 @@ internal virtual void ValidateParameters() if ((WebSession != null) && (SessionVariable != null)) { ErrorRecord error = GetValidationError(WebCmdletStrings.SessionConflict, - "WebCmdletSessionConflictException"); + "WebCmdletSessionConflictException"); ThrowTerminatingError(error); } @@ -421,7 +421,7 @@ internal virtual void ValidateParameters() if (UseDefaultCredentials && (Authentication != WebAuthenticationType.None)) { ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationConflict, - "WebCmdletAuthenticationConflictException"); + "WebCmdletAuthenticationConflictException"); ThrowTerminatingError(error); }