From 51d655ab2f3ae9e73abfad62e83bff665a2e18eb Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Tue, 17 Jan 2023 23:31:43 +0100 Subject: [PATCH 01/12] rework SetRequestContent --- .../Common/WebRequestPSCmdlet.Common.cs | 105 ++++++------------ 1 file changed, 32 insertions(+), 73 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 73eb34013a5..a3aa608c571 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 @@ -1097,7 +1097,7 @@ internal virtual void FillRequestStream(HttpRequestMessage request) AddMultipartContent(fieldName: formEntry.Key, fieldValue: formEntry.Value, formData: formData, enumerate: true); } - SetRequestContent(request, formData); + request.Content = SetRequestContent(request, formData); } // coerce body into a usable form else if (Body is not null) @@ -1111,44 +1111,23 @@ internal virtual void FillRequestStream(HttpRequestMessage request) content = psBody.BaseObject; } - if (content is FormObject form) + request.Content = content switch { - SetRequestContent(request, form.Fields); - } - else if (content is IDictionary dictionary && request.Method != HttpMethod.Get) - { - SetRequestContent(request, dictionary); - } - else if (content is XmlNode xmlNode) - { - SetRequestContent(request, xmlNode); - } - else if (content is Stream stream) - { - SetRequestContent(request, stream); - } - else if (content is byte[] bytes) - { - SetRequestContent(request, bytes); - } - else if (content is MultipartFormDataContent multipartFormDataContent) - { - WebSession.ContentHeaders.Clear(); - SetRequestContent(request, multipartFormDataContent); - } - else - { - SetRequestContent( - request, - (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture)); - } + FormObject form => SetRequestContent(request, form.Fields), + IDictionary dictionary => SetRequestContent(request, dictionary), + XmlNode xmlNode => SetRequestContent(request, xmlNode), + Stream stream => SetRequestContent(request, stream), + byte[] bytes => SetRequestContent(request, bytes), + MultipartFormDataContent multipartFormDataContent => SetRequestContent(request, multipartFormDataContent), + _ => SetRequestContent(request, (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture)) + }; } else if (InFile is not null) // copy InFile data { try { // open the input file - SetRequestContent(request, new FileStream(InFile, FileMode.Open, FileAccess.Read, FileShare.Read)); + request.Content = SetRequestContent(request, new FileStream(InFile, FileMode.Open, FileAccess.Read, FileShare.Read)); } catch (UnauthorizedAccessException) { @@ -1577,19 +1556,14 @@ protected override void ProcessRecord() /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, byte[] content) + internal ByteArrayContent SetRequestContent(HttpRequestMessage request, byte[] content) { ArgumentNullException.ThrowIfNull(request); + ArgumentNullException.ThrowIfNull(content); - if (content is null) - { - return 0; - } - - var byteArrayContent = new ByteArrayContent(content); - request.Content = byteArrayContent; + ByteArrayContent byteArrayContent = new(content); - return byteArrayContent.Headers.ContentLength.Value; + return byteArrayContent; } /// @@ -1602,14 +1576,10 @@ internal long SetRequestContent(HttpRequestMessage request, byte[] content) /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, string content) + internal ByteArrayContent SetRequestContent(HttpRequestMessage request, string content) { ArgumentNullException.ThrowIfNull(request); - - if (content is null) - { - return 0; - } + ArgumentNullException.ThrowIfNull(content); Encoding encoding = null; if (ContentType is not null) @@ -1629,7 +1599,7 @@ internal long SetRequestContent(HttpRequestMessage request, string content) { if (!SkipHeaderValidation) { - var outerEx = new ValidationMetadataException(WebCmdletStrings.ContentTypeException, ex); + ValidationMetadataException outerEx = new(WebCmdletStrings.ContentTypeException, ex); ErrorRecord er = new(outerEx, "WebCmdletContentTypeException", ErrorCategory.InvalidArgument, ContentType); ThrowTerminatingError(er); } @@ -1637,20 +1607,15 @@ internal long SetRequestContent(HttpRequestMessage request, string content) } byte[] bytes = StreamHelper.EncodeToBytes(content, encoding); - var byteArrayContent = new ByteArrayContent(bytes); - request.Content = byteArrayContent; - - return byteArrayContent.Headers.ContentLength.Value; + ByteArrayContent byteArrayContent = new(bytes); + + return byteArrayContent; } - internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) + internal ByteArrayContent SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) { ArgumentNullException.ThrowIfNull(request); - - if (xmlNode is null) - { - return 0; - } + ArgumentNullException.ThrowIfNull(xmlNode); byte[] bytes = null; XmlDocument doc = xmlNode as XmlDocument; @@ -1665,10 +1630,9 @@ internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) bytes = StreamHelper.EncodeToBytes(xmlNode.OuterXml, encoding: null); } - var byteArrayContent = new ByteArrayContent(bytes); - request.Content = byteArrayContent; + ByteArrayContent byteArrayContent = new(bytes); - return byteArrayContent.Headers.ContentLength.Value; + return byteArrayContent; } /// @@ -1681,16 +1645,14 @@ internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, Stream contentStream) + internal StreamContent SetRequestContent(HttpRequestMessage request, Stream contentStream) { ArgumentNullException.ThrowIfNull(request); - ArgumentNullException.ThrowIfNull(contentStream); - var streamContent = new StreamContent(contentStream); - request.Content = streamContent; + StreamContent streamContent = new(contentStream); - return streamContent.Headers.ContentLength.Value; + return streamContent; } /// @@ -1703,24 +1665,21 @@ internal long SetRequestContent(HttpRequestMessage request, Stream contentStream /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent) + internal MultipartFormDataContent SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent) { ArgumentNullException.ThrowIfNull(request); - ArgumentNullException.ThrowIfNull(multipartContent); - request.Content = multipartContent; - - return multipartContent.Headers.ContentLength.Value; + return multipartContent; } - internal long SetRequestContent(HttpRequestMessage request, IDictionary content) + internal ByteArrayContent SetRequestContent(HttpRequestMessage request, IDictionary content) { ArgumentNullException.ThrowIfNull(request); - ArgumentNullException.ThrowIfNull(content); string body = FormatDictionary(content); + return SetRequestContent(request, body); } From 45eceb5de02385f7567375180125b467962ce806 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Tue, 17 Jan 2023 23:33:39 +0100 Subject: [PATCH 02/12] Fix comments --- .../WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 9 +++++---- 1 file changed, 5 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 a3aa608c571..6782a7f57cf 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 @@ -1099,12 +1099,12 @@ internal virtual void FillRequestStream(HttpRequestMessage request) request.Content = SetRequestContent(request, formData); } - // coerce body into a usable form + // Coerce body into a usable form else if (Body is not null) { object content = Body; - // make sure we're using the base object of the body, not the PSObject wrapper + // Make sure we're using the base object of the body, not the PSObject wrapper PSObject psBody = Body as PSObject; if (psBody is not null) { @@ -1122,11 +1122,12 @@ internal virtual void FillRequestStream(HttpRequestMessage request) _ => SetRequestContent(request, (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture)) }; } - else if (InFile is not null) // copy InFile data + // Copy InFile data + else if (InFile is not null) { try { - // open the input file + // Open the input file request.Content = SetRequestContent(request, new FileStream(InFile, FileMode.Open, FileAccess.Read, FileShare.Read)); } catch (UnauthorizedAccessException) From 816e57eb18b1bb6965c3462954fcbd0000bdea1b Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Tue, 17 Jan 2023 23:42:56 +0100 Subject: [PATCH 03/12] move WebSession.ContentHeaders.Clear(); --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 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 6782a7f57cf..e8194c3aec7 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 @@ -1087,9 +1087,6 @@ internal virtual void FillRequestStream(HttpRequestMessage request) if (Form is not null) { - // Content headers will be set by MultipartFormDataContent which will throw unless we clear them first - WebSession.ContentHeaders.Clear(); - var formData = new MultipartFormDataContent(); foreach (DictionaryEntry formEntry in Form) { @@ -1670,6 +1667,9 @@ internal MultipartFormDataContent SetRequestContent(HttpRequestMessage request, { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(multipartContent); + + // Content headers will be set by MultipartFormDataContent which will throw unless we clear them first + WebSession.ContentHeaders.Clear(); return multipartContent; } From e3fd15fe2af00964b48ef385ffecd9c6fbc89f31 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 11:01:04 +0100 Subject: [PATCH 04/12] Add suggestion --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 3 +-- 1 file changed, 1 insertion(+), 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 e8194c3aec7..f14303741bc 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 @@ -1102,8 +1102,7 @@ internal virtual void FillRequestStream(HttpRequestMessage request) object content = Body; // Make sure we're using the base object of the body, not the PSObject wrapper - PSObject psBody = Body as PSObject; - if (psBody is not null) + if (Body is PSObject psBody) { content = psBody.BaseObject; } From 66e81c45af315739089ae26df6d5ac7f0a9e9b00 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 11:03:26 +0100 Subject: [PATCH 05/12] Move comments --- .../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 f14303741bc..bcf83f885fb 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 @@ -1096,9 +1096,9 @@ internal virtual void FillRequestStream(HttpRequestMessage request) request.Content = SetRequestContent(request, formData); } - // Coerce body into a usable form else if (Body is not null) { + // Coerce body into a usable form object content = Body; // Make sure we're using the base object of the body, not the PSObject wrapper @@ -1118,9 +1118,9 @@ internal virtual void FillRequestStream(HttpRequestMessage request) _ => SetRequestContent(request, (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture)) }; } - // Copy InFile data else if (InFile is not null) { + // Copy InFile data try { // Open the input file From 74934d04c444342dc199a0410bcb43ca9a05ad45 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:19:58 +0100 Subject: [PATCH 06/12] switch expression -> switch --- .../Common/WebRequestPSCmdlet.Common.cs | 65 ++++++++++++------- 1 file changed, 42 insertions(+), 23 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 bcf83f885fb..2aa0e143dce 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 @@ -1107,16 +1107,30 @@ internal virtual void FillRequestStream(HttpRequestMessage request) content = psBody.BaseObject; } - request.Content = content switch + switch (content) { - FormObject form => SetRequestContent(request, form.Fields), - IDictionary dictionary => SetRequestContent(request, dictionary), - XmlNode xmlNode => SetRequestContent(request, xmlNode), - Stream stream => SetRequestContent(request, stream), - byte[] bytes => SetRequestContent(request, bytes), - MultipartFormDataContent multipartFormDataContent => SetRequestContent(request, multipartFormDataContent), - _ => SetRequestContent(request, (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture)) - }; + case FormObject form: + SetRequestContent(request, form.Fields); + break; + case IDictionary dictionary: + SetRequestContent(request, dictionary); + break; + case XmlNode xmlNode: + SetRequestContent(request, xmlNode); + break; + case Stream stream: + SetRequestContent(request, stream); + break; + case byte[] bytes: + SetRequestContent(request, bytes); + break; + case MultipartFormDataContent multipartFormDataContent: + SetRequestContent(request, multipartFormDataContent); + break; + default: + SetRequestContent(request, (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture)); + break; + } } else if (InFile is not null) { @@ -1124,7 +1138,7 @@ internal virtual void FillRequestStream(HttpRequestMessage request) try { // Open the input file - request.Content = SetRequestContent(request, new FileStream(InFile, FileMode.Open, FileAccess.Read, FileShare.Read)); + SetRequestContent(request, new FileStream(InFile, FileMode.Open, FileAccess.Read, FileShare.Read)); } catch (UnauthorizedAccessException) { @@ -1553,14 +1567,15 @@ protected override void ProcessRecord() /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal ByteArrayContent SetRequestContent(HttpRequestMessage request, byte[] content) + internal long SetRequestContent(HttpRequestMessage request, byte[] content) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(content); ByteArrayContent byteArrayContent = new(content); + request.Content = byteArrayContent; - return byteArrayContent; + return 0; } /// @@ -1573,7 +1588,7 @@ internal ByteArrayContent SetRequestContent(HttpRequestMessage request, byte[] c /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal ByteArrayContent SetRequestContent(HttpRequestMessage request, string content) + internal long SetRequestContent(HttpRequestMessage request, string content) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(content); @@ -1604,12 +1619,13 @@ internal ByteArrayContent SetRequestContent(HttpRequestMessage request, string c } byte[] bytes = StreamHelper.EncodeToBytes(content, encoding); - ByteArrayContent byteArrayContent = new(bytes); - - return byteArrayContent; + ByteArrayContent byteArrayContent = new(bytes); + request.Content = byteArrayContent; + + return 0; } - internal ByteArrayContent SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) + internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(xmlNode); @@ -1629,7 +1645,7 @@ internal ByteArrayContent SetRequestContent(HttpRequestMessage request, XmlNode ByteArrayContent byteArrayContent = new(bytes); - return byteArrayContent; + request.Content = byteArrayContent; } /// @@ -1642,14 +1658,15 @@ internal ByteArrayContent SetRequestContent(HttpRequestMessage request, XmlNode /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal StreamContent SetRequestContent(HttpRequestMessage request, Stream contentStream) + internal long SetRequestContent(HttpRequestMessage request, Stream contentStream) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(contentStream); StreamContent streamContent = new(contentStream); + request.Content = streamContent; - return streamContent; + return 0; } /// @@ -1662,7 +1679,7 @@ internal StreamContent SetRequestContent(HttpRequestMessage request, Stream cont /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal MultipartFormDataContent SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent) + internal long SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(multipartContent); @@ -1670,10 +1687,12 @@ internal MultipartFormDataContent SetRequestContent(HttpRequestMessage request, // Content headers will be set by MultipartFormDataContent which will throw unless we clear them first WebSession.ContentHeaders.Clear(); - return multipartContent; + request.Content = multipartContent; + + return 0; } - internal ByteArrayContent SetRequestContent(HttpRequestMessage request, IDictionary content) + internal long SetRequestContent(HttpRequestMessage request, IDictionary content) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(content); From 97a8c3332bbc6d6912d6af548b778eede59ea37e Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:23:23 +0100 Subject: [PATCH 07/12] removed the last request.Content = --- .../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 2aa0e143dce..bac3790240f 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 @@ -1094,7 +1094,7 @@ internal virtual void FillRequestStream(HttpRequestMessage request) AddMultipartContent(fieldName: formEntry.Key, fieldValue: formEntry.Value, formData: formData, enumerate: true); } - request.Content = SetRequestContent(request, formData); + SetRequestContent(request, formData); } else if (Body is not null) { From c5f759e8ca6a813078f2ea06d7e8c4714a453027 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:27:14 +0100 Subject: [PATCH 08/12] add forgotten return --- .../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 bac3790240f..1c56310ed8b 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 @@ -1646,6 +1646,8 @@ internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) ByteArrayContent byteArrayContent = new(bytes); request.Content = byteArrayContent; + + return 0; } /// From 1b65df822c4c15de6327c2d08f710047a48317b1 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:46:09 +0100 Subject: [PATCH 09/12] Update src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs Co-authored-by: Ilya --- .../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 1c56310ed8b..012fad37b30 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 @@ -1619,7 +1619,7 @@ internal long SetRequestContent(HttpRequestMessage request, string content) } byte[] bytes = StreamHelper.EncodeToBytes(content, encoding); - ByteArrayContent byteArrayContent = new(bytes); + ByteArrayContent byteArrayContent = new(bytes); request.Content = byteArrayContent; return 0; From 97ebac36941cd977051a12fe96110b2bac865759 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:04:16 +0100 Subject: [PATCH 10/12] void SetRequestContent --- .../Common/WebRequestPSCmdlet.Common.cs | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 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 012fad37b30..563dbfd5f66 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 @@ -1567,15 +1567,13 @@ protected override void ProcessRecord() /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, byte[] content) + internal void SetRequestContent(HttpRequestMessage request, byte[] content) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(content); ByteArrayContent byteArrayContent = new(content); request.Content = byteArrayContent; - - return 0; } /// @@ -1588,7 +1586,7 @@ internal long SetRequestContent(HttpRequestMessage request, byte[] content) /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, string content) + internal void SetRequestContent(HttpRequestMessage request, string content) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(content); @@ -1621,11 +1619,9 @@ internal long SetRequestContent(HttpRequestMessage request, string content) byte[] bytes = StreamHelper.EncodeToBytes(content, encoding); ByteArrayContent byteArrayContent = new(bytes); request.Content = byteArrayContent; - - return 0; } - internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) + internal void SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(xmlNode); @@ -1646,8 +1642,6 @@ internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) ByteArrayContent byteArrayContent = new(bytes); request.Content = byteArrayContent; - - return 0; } /// @@ -1660,15 +1654,13 @@ internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, Stream contentStream) + internal void SetRequestContent(HttpRequestMessage request, Stream contentStream) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(contentStream); StreamContent streamContent = new(contentStream); request.Content = streamContent; - - return 0; } /// @@ -1681,7 +1673,7 @@ internal long SetRequestContent(HttpRequestMessage request, Stream contentStream /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. /// - internal long SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent) + internal void SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(multipartContent); @@ -1690,18 +1682,15 @@ internal long SetRequestContent(HttpRequestMessage request, MultipartFormDataCon WebSession.ContentHeaders.Clear(); request.Content = multipartContent; - - return 0; } - internal long SetRequestContent(HttpRequestMessage request, IDictionary content) + internal void SetRequestContent(HttpRequestMessage request, IDictionary content) { ArgumentNullException.ThrowIfNull(request); ArgumentNullException.ThrowIfNull(content); string body = FormatDictionary(content); - - return SetRequestContent(request, body); + SetRequestContent(request, body); } internal void ParseLinkHeader(HttpResponseMessage response, System.Uri requestUri) From f358b7551ab67e2efcfd2b748013add03e16cd39 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:07:34 +0100 Subject: [PATCH 11/12] remove /// --- .../utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs | 4 ---- 1 file changed, 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 563dbfd5f66..bd556af4902 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 @@ -1562,7 +1562,6 @@ protected override void ProcessRecord() /// /// The WebRequest who's content is to be set. /// A byte array containing the content data. - /// The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property. /// /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. @@ -1581,7 +1580,6 @@ internal void SetRequestContent(HttpRequestMessage request, byte[] content) /// /// The WebRequest who's content is to be set. /// A String object containing the content data. - /// The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property. /// /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. @@ -1649,7 +1647,6 @@ internal void SetRequestContent(HttpRequestMessage request, XmlNode xmlNode) /// /// The WebRequest who's content is to be set. /// A Stream object containing the content data. - /// The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property. /// /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. @@ -1668,7 +1665,6 @@ internal void SetRequestContent(HttpRequestMessage request, Stream contentStream /// /// The WebRequest who's content is to be set. /// A MultipartFormDataContent object containing multipart/form-data content. - /// The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property. /// /// Because this function sets the request's ContentLength property and writes content data into the requests's stream, /// it should be called one time maximum on a given request. From 4bc4be207687b6c2b646540792517a1c605674fa Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Wed, 18 Jan 2023 14:40:23 +0100 Subject: [PATCH 12/12] go back to old logic --- .../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 bd556af4902..5a9478d02cb 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 @@ -1112,7 +1112,7 @@ internal virtual void FillRequestStream(HttpRequestMessage request) case FormObject form: SetRequestContent(request, form.Fields); break; - case IDictionary dictionary: + case IDictionary dictionary when request.Method != HttpMethod.Get: SetRequestContent(request, dictionary); break; case XmlNode xmlNode: