Skip to content

[http-client-csharp] Fix BinaryContent wrapping in MethodParameterSegments navigation#10740

Open
JonathanCrd wants to merge 1 commit into
microsoft:mainfrom
JonathanCrd:joncarde/spector-streaming-jsonl
Open

[http-client-csharp] Fix BinaryContent wrapping in MethodParameterSegments navigation#10740
JonathanCrd wants to merge 1 commit into
microsoft:mainfrom
JonathanCrd:joncarde/spector-streaming-jsonl

Conversation

@JonathanCrd
Copy link
Copy Markdown
Member

@JonathanCrd JonathanCrd commented May 19, 2026

Summary

Fixes a generator bug where MethodParameterSegments navigation resolving to a BinaryData property was passed directly as a BinaryContent protocol argument without wrapping in BinaryContent.Create(), causing a CS1503 compilation error.

Bug Fix

When ScmMethodProviderCollection.GetProtocolMethodArguments() navigates MethodParameterSegments to resolve a property path (e.g., streamstream.Body), the resolved BinaryData expression was passed directly as a BinaryContent protocol argument. The fix wraps the expression with BinaryContent.Create() when the protocol parameter is a content parameter.

This also fixed a pre-existing latent bug in the Sample-TypeSpec NoContentType method (info.Action had the same issue).

Changes

  • Fix ScmMethodProviderCollection.GetProtocolMethodArguments() to wrap with RequestContentApiSnippets.Create() when the protocol param is a content parameter
  • Add unit test for the BinaryData-to-BinaryContent wrapping case
  • Regenerate Sample-TypeSpec (side-effect of the fix)

Validation

  • All 1335 ClientModel generator tests pass
  • All 37 Local tests pass

🤖 Created with JonathanCrd's copilot

…n MethodParameterSegments navigation

When MethodParameterSegments navigation resolves to a BinaryData property,
the expression was passed directly as a BinaryContent protocol argument
without wrapping. This caused a CS1503 compilation error.

Wrap the resolved property expression with RequestContentApiSnippets.Create()
when the protocol parameter is a content parameter.

Co-authored-by: Copilot <223556219+Copilot@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 May 19, 2026
@JonathanCrd JonathanCrd self-assigned this May 19, 2026
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 19, 2026

Open in StackBlitz

npm i https://pkg.pr.new/@typespec/http-client-csharp@10740

commit: 6ed8048

@github-actions
Copy link
Copy Markdown
Contributor

No changes needing a change description found.

@JonathanCrd JonathanCrd force-pushed the joncarde/spector-streaming-jsonl branch from 952f63e to e5cca81 Compare May 21, 2026 00:13
@JonathanCrd JonathanCrd changed the title [http-client-csharp] Adopt streaming/jsonl Spector scenario and fix BinaryContent wrapping [http-client-csharp] Fix BinaryContent wrapping in MethodParameterSegments navigation May 21, 2026
Argument.AssertNotNull(info, nameof(info));

ClientResult result = NoContentType(info.P2, info.P1, info.Action, cancellationToken.ToRequestOptions());
ClientResult result = NoContentType(info.P2, info.P1, BinaryContent.Create(info.Action), cancellationToken.ToRequestOptions());
Copy link
Copy Markdown
Contributor

@jorgerangel-msft jorgerangel-msft May 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What you have is not incorrect since it looks like this factory method eventually serializes the model with wire options, but we also already generate an implicit operator for mrw implemented models so what was here before was more intentional. Do you think we should scope down the change to only apply this for non model types and types that are supported by the BinaryContent.Create overloads?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair point, let me try scoping it as you suggest

@JonathanCrd JonathanCrd force-pushed the joncarde/spector-streaming-jsonl branch from 5bab1fe to 6ed8048 Compare May 27, 2026 21:54
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.

3 participants