Fix optional Content-Type headers being transformed to enums (emitter-only)#9495
Merged
JoshLove-msft merged 7 commits intomainfrom Jan 29, 2026
Merged
Conversation
…t to Method for optional Content-Type headers Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix optional contentType issue
Fix optional Content-Type headers treated as constants
Jan 28, 2026
…ansformation Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Copilot
AI
changed the title
Fix optional Content-Type headers treated as constants
Fix optional Content-Type headers being transformed to enums
Jan 28, 2026
...sharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs
Show resolved
Hide resolved
...TypeSpec.Generator.ClientModel/test/Providers/RestClientProviders/RestClientProviderTests.cs
Outdated
Show resolved
Hide resolved
Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Copilot
AI
changed the title
Fix optional Content-Type headers being transformed to enums
Fix optional Content-Type headers being transformed to enums (emitter-only)
Jan 28, 2026
packages/http-client-csharp/emitter/src/lib/operation-converter.ts
Outdated
Show resolved
Hide resolved
Contributor
|
No changes needing a change description found. |
ArcturusZhang
approved these changes
Jan 29, 2026
jorgerangel-msft
approved these changes
Jan 29, 2026
7 tasks
github-merge-queue bot
pushed a commit
that referenced
this pull request
Jan 30, 2026
…essing (#9528) - [x] Understand the issue: The previous fix in PR #9495 added Content-Type header detection in `type-converter.ts`, but it relies on `sdkProperty` being passed to `fromSdkType`. The `fromHeaderParameter` function in `operation-converter.ts` doesn't pass the header parameter to `fromSdkType`, so the fix doesn't work. - [x] Fix `fromHeaderParameter` to pass the header parameter `p` to `fromSdkType` so the Content-Type detection can work - [x] Unify all parameter-processing functions to pass property instance to `fromSdkType`: - `fromQueryParameter` - `fromPathParameter` - `fromHeaderParameter` - `fromBodyParameter` - `updateMethodParameter` - [x] Investigated making `sdkProperty` required - not feasible as many callers have no property context (model base types, array/dict value types, etc.) - [x] Run existing tests to verify the fix works (all 177 tests pass) - [x] Fix CI formatting issues - [x] Run code review and security checks <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>Fix optional contentType issue</issue_title> > <issue_description>As described in Azure/azure-sdk-for-net#55300, but the issue belongs in this repo.</issue_description> > > <agent_instructions>The previous [fix ](#9495) does not really fix the issue entirely. > Please fix this again following the root cause in this comment: https://github.com/microsoft/typespec/issues/9494#issuecomment-3822513806</agent_instructions> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > <comment_new><author>@ArcturusZhang</author><body> > I think this is not fixed. > The fix introduced an extra check to see if it is a content type header, by checking if the `sdkProperty` is not undefined, but in our code, when the `fromSdkType` is called converting the method parameters (for instance [here](https://github.com/microsoft/typespec/blob/f1a7649b3b53ab7d30488cf7274f813696cdf2d0/packages/http-client-csharp/emitter/src/lib/operation-converter.ts#L482)), the `sdkProperty` argument is never passed in. Therefore the fix is not actually running.</body></comment_new> > </comments> > </details> <!-- START COPILOT CODING AGENT SUFFIX --> - Fixes #9494 <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ArcturusZhang <10554446+ArcturusZhang@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Optional Content-Type headers were incorrectly transformed into extensible enums by the type converter. They must remain as constants.
Changes
Emitter (type-converter.ts)
Emitter (operation-converter.ts)
fromSdkTypeto enable Content-Type detectionEmitter Tests (operation-converter.test.ts)
Result
Content-Type headers now remain as constants in the type model instead of being transformed to enums when the body parameter is optional. This prevents the enum transformation while preserving the constant type information for downstream processing.
Note
This PR focuses solely on the emitter-side fix to prevent unwanted enum transformation. Generator-side handling of optional Content-Type parameters (if needed for conditional setting) will be addressed separately.
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.