Skip to content

Fix optional Content-Type headers being transformed to enums (emitter-only)#9495

Merged
JoshLove-msft merged 7 commits intomainfrom
copilot/fix-optional-content-type-issue
Jan 29, 2026
Merged

Fix optional Content-Type headers being transformed to enums (emitter-only)#9495
JoshLove-msft merged 7 commits intomainfrom
copilot/fix-optional-content-type-issue

Conversation

Copy link
Contributor

Copilot AI commented Jan 28, 2026

Optional Content-Type headers were incorrectly transformed into extensible enums by the type converter. They must remain as constants.

Changes

Emitter (type-converter.ts)

  • Skip enum transformation for Content-Type headers, preserving constant type regardless of optionality

Emitter (operation-converter.ts)

  • Pass header parameter to fromSdkType to enable Content-Type detection

Emitter Tests (operation-converter.test.ts)

  • Added tests to verify Content-Type remains as constant type for both optional and required bodies

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

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>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…t to Method for optional Content-Type headers

Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
@microsoft-github-policy-service microsoft-github-policy-service bot added the emitter:client:csharp Issue for the C# client emitter: @typespec/http-client-csharp label Jan 28, 2026
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
Copilot AI requested a review from JoshLove-msft January 28, 2026 20:12
…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
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
Copilot AI requested a review from JoshLove-msft January 28, 2026 20:43
@JoshLove-msft JoshLove-msft marked this pull request as ready for review January 28, 2026 21:46
@github-actions
Copy link
Contributor

No changes needing a change description found.

@JoshLove-msft JoshLove-msft added this pull request to the merge queue Jan 29, 2026
Merged via the queue into main with commit fde4798 Jan 29, 2026
23 checks passed
@JoshLove-msft JoshLove-msft deleted the copilot/fix-optional-content-type-issue branch January 29, 2026 16:41
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

emitter:client:csharp Issue for the C# client emitter: @typespec/http-client-csharp

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix optional contentType issue

4 participants