From b4f5cd7d6da74d859ccbf8b86cd5598edc32d426 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Wed, 22 Oct 2025 10:39:56 -0700 Subject: [PATCH 1/4] minor: added long path support to prerequisite --- packages/http-client-csharp/CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/http-client-csharp/CONTRIBUTING.md b/packages/http-client-csharp/CONTRIBUTING.md index d32813e3357..53518283b9c 100644 --- a/packages/http-client-csharp/CONTRIBUTING.md +++ b/packages/http-client-csharp/CONTRIBUTING.md @@ -22,6 +22,7 @@ Before you begin, ensure you have the following installed: - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - [Git](https://git-scm.com/) - [PowerShell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell) (version 7.0 or higher, for advanced testing and code generation scenarios) +- [Long Path Support](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell#registry-setting-to-enable-long-paths) (Windows only required to avoid path length limitations during development) ## Getting Started From 29379064e62c558c25277f0e3df47e4e309eddc7 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Thu, 29 Jan 2026 15:26:33 -0800 Subject: [PATCH 2/4] generalize reinjection parameter --- .../src/Providers/RestClientProvider.cs | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs index 43c3dabf62c..c72e4f4f3d2 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs @@ -23,10 +23,8 @@ public class RestClientProvider : TypeProvider { private const string RepeatabilityRequestIdHeader = "Repeatability-Request-ID"; private const string RepeatabilityFirstSentHeader = "Repeatability-First-Sent"; - private const string MaxPageSizeParameterName = "maxpagesize"; private const string TopParameterName = "top"; private const string MaxCountParameterName = "maxCount"; - private const string ApiVersionParameterName = "api-version"; private static readonly Dictionary _knownSpecialHeaderParams = new(StringComparer.OrdinalIgnoreCase) { @@ -465,8 +463,10 @@ private List AppendQueryParameters(ScopedApi uri, InputOper } // Determine if we should update existing parameters or always append + InputPagingServiceMethod? pagingServiceMethod = _inputClient.Methods.OfType() + .FirstOrDefault(m => m.Operation == operation); bool shouldUpdateExisting = isNextLinkRequest && - ShouldUpdateReinjectedParameter(inputQueryParameter.SerializedName) && + ShouldUpdateReinjectedParameter(inputQueryParameter, pagingServiceMethod) && paramType?.IsCollection != true; MethodBodyStatement statement = shouldUpdateExisting @@ -857,12 +857,27 @@ private static bool TryGetSpecialHeaderParam(InputParameter inputParameter, [Not return false; } - private static bool ShouldUpdateReinjectedParameter(string parameterName) + private static bool ShouldUpdateReinjectedParameter(InputParameter inputParameter, InputPagingServiceMethod? pagingServiceMethod) { - return parameterName.Equals(MaxPageSizeParameterName, StringComparison.OrdinalIgnoreCase) || - parameterName.Equals(ApiVersionParameterName, StringComparison.OrdinalIgnoreCase); - // In the future, we can extend this to check multiple parameters + // Check if this is an API version parameter + if (inputParameter.IsApiVersion) + { + return true; + } + + // Check if this is a max page size parameter + if (pagingServiceMethod?.PagingMetadata.PageSizeParameterSegments?.Count > 0) + { + var pageSizeParameterName = pagingServiceMethod.PagingMetadata.PageSizeParameterSegments.Last(); + if (inputParameter.Name.Equals(pageSizeParameterName, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; } + private static List GetSuccessStatusCodes(InputOperation operation) { From 42402d95fdc6a6a5790921604d3204b33c3dad87 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Thu, 29 Jan 2026 15:33:03 -0800 Subject: [PATCH 3/4] whitespace removeed --- .../src/Providers/RestClientProvider.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs index c72e4f4f3d2..1c9365c6cb2 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs @@ -877,7 +877,6 @@ private static bool ShouldUpdateReinjectedParameter(InputParameter inputParamete return false; } - private static List GetSuccessStatusCodes(InputOperation operation) { From 43f1640317eb67d5edb1f4e16c6195b2dcf5f4dd Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Fri, 30 Jan 2026 11:46:00 -0800 Subject: [PATCH 4/4] GetPageSizeParameterName --- .../src/Providers/RestClientProvider.cs | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs index 1c9365c6cb2..7baa50bea9b 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs @@ -144,9 +144,9 @@ private ScmMethodProvider BuildCreateRequestMethod(InputServiceMethod serviceMet } // Add maxPageSize parameter if PageSizeParameterSegments is specified - if (pagingServiceMethod?.PagingMetadata.PageSizeParameterSegments?.Count > 0) + var pageSizeParameterName = GetPageSizeParameterName(pagingServiceMethod); + if (pageSizeParameterName != null) { - var pageSizeParameterName = pagingServiceMethod.PagingMetadata.PageSizeParameterSegments.Last(); reinjectedParamNames.Add(pageSizeParameterName); } @@ -292,9 +292,9 @@ private Dictionary GetReinjectedParametersMap( } // Add maxPageSize parameter if PageSizeParameterSegments is specified - if (pagingServiceMethod?.PagingMetadata.PageSizeParameterSegments?.Count > 0) + var pageSizeParameterName = GetPageSizeParameterName(pagingServiceMethod); + if (pageSizeParameterName != null) { - var pageSizeParameterName = pagingServiceMethod.PagingMetadata.PageSizeParameterSegments.Last(); // Find the parameter in the operation parameters var pageSizeParameter = operation.Parameters.FirstOrDefault(p => p.Name == pageSizeParameterName); if (pageSizeParameter != null) @@ -857,7 +857,14 @@ private static bool TryGetSpecialHeaderParam(InputParameter inputParameter, [Not return false; } - private static bool ShouldUpdateReinjectedParameter(InputParameter inputParameter, InputPagingServiceMethod? pagingServiceMethod) + private static string? GetPageSizeParameterName(InputPagingServiceMethod? pagingServiceMethod) + { + return pagingServiceMethod?.PagingMetadata?.PageSizeParameterSegments?.Count > 0 + ? pagingServiceMethod.PagingMetadata.PageSizeParameterSegments.Last() + : null; + } + + private static bool ShouldUpdateReinjectedParameter(InputParameter inputParameter, InputPagingServiceMethod? pagingServiceMethod) { // Check if this is an API version parameter if (inputParameter.IsApiVersion) @@ -866,13 +873,10 @@ private static bool ShouldUpdateReinjectedParameter(InputParameter inputParamete } // Check if this is a max page size parameter - if (pagingServiceMethod?.PagingMetadata.PageSizeParameterSegments?.Count > 0) + var pageSizeParameterName = GetPageSizeParameterName(pagingServiceMethod); + if (pageSizeParameterName != null && inputParameter.Name.Equals(pageSizeParameterName, StringComparison.OrdinalIgnoreCase)) { - var pageSizeParameterName = pagingServiceMethod.PagingMetadata.PageSizeParameterSegments.Last(); - if (inputParameter.Name.Equals(pageSizeParameterName, StringComparison.OrdinalIgnoreCase)) - { - return true; - } + return true; } return false;