Repository navigation
[http-client-csharp] Rename Request model suffix to Content - #12514
Merged
JoshLove-msft merged 1 commit intoNov 7, 2026
Merged
JoshLove-msft merged 1 commit into
JoshLove-msft merged 1 commit into
Conversation
Apply Request-to-Content suffix normalization regardless of model usage, preserving exact names, customizations, previous contracts, and collision handling. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
JoshLove-msft
requested review from
Alan Zimmer (alzimmermsft),
Jorge Rangel (jorgerangel-msft),
Jose Arriaga Maldonado (joseharriaga) and
m-nash
as code owners
November 6, 2026 22:36
Alan Zimmer (alzimmermsft)
approved these changes
Nov 6, 2026
commit: |
JoshLove-msft
enabled auto-merge
November 6, 2026 22:38
Contributor
|
No changes needing a change description found. |
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Regeneration can miss an existing WidgetRequest contract or handwritten partial for input-only WidgetContent, removing its published identity or detaching customization because the fallback no longer checks the former name.
1 open issue
What changed in this PR
Corrects the C# client emitter’s model naming rule introduced in #12493: terminal, case-sensitive Request suffixes become Content across all model usages, while the existing non-error Response → Result rule remains unchanged.
Changes:
- Reverses the suffix conversion and updates naming, customization, contract, and collision regressions.
- Regenerates multipart and server-sent event client baselines and updates their runtime callers.
- Corrects the naming-conventions documentation.
All paths below are relative to packages/http-client-csharp/generator/.
| File | Description |
|---|---|
TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs |
Renames the retrieval factory method and return type. |
TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs |
Uses RetrievalContent in the streaming overload. |
TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs |
Registers the renamed retrieval model. |
TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalContent.Serialization.cs |
Updates serialization signatures to RetrievalContent. |
TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalContent.cs |
Renames the retrieval model and constructor. |
TestProjects/Spector/http/payload/multipart/src/Generated/PayloadMultiPartModelFactory.cs |
Updates multipart factory methods and return types. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/UploadFileSpecificContentTypeContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/UploadFileSpecificContentTypeContent.cs |
Renames the upload model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/UploadFileRequiredFilenameContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/UploadFileRequiredFilenameContent.cs |
Renames the required-filename model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/UploadFileArrayContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/UploadFileArrayContent.cs |
Renames the file-array model and constructor. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiPartOptionalRequest.Serialization.Multipart.cs |
Removes the old Request partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiPartOptionalContent.Serialization.Multipart.cs |
Adds the replacement Content partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiPartOptionalContent.cs |
Renames the optional-parts model and constructor. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiPartContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiPartContent.cs |
Renames the basic multipart model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiBinaryPartsContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/MultiBinaryPartsContent.cs |
Renames the multiple-binary-parts model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/JsonPartContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/JsonPartContent.cs |
Renames the JSON-part model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FloatContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FloatContent.cs |
Renames the float model and constructor. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartSpecificContentTypeRequest.Serialization.Multipart.cs |
Removes the old Request partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartSpecificContentTypeContent.Serialization.Multipart.cs |
Adds the replacement Content partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartSpecificContentTypeContent.cs |
Renames the specific-content-type model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartRequiredContentTypeRequest.Serialization.Multipart.cs |
Removes the old Request partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartRequiredContentTypeContent.Serialization.Multipart.cs |
Adds the replacement Content partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartRequiredContentTypeContent.cs |
Renames the required-content-type model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartOptionalContentTypeContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/FileWithHttpPartOptionalContentTypeContent.cs |
Renames the optional-content-type model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/ComplexPartsContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/ComplexPartsContent.cs |
Renames the complex-parts model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/ComplexHttpPartsModelContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/ComplexHttpPartsModelContent.cs |
Renames the mixed HTTP-parts model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/BinaryArrayPartsContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/BinaryArrayPartsContent.cs |
Renames the binary-array model and constructor. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/AnonymousModelContent.Serialization.Multipart.cs |
Renames the multipart partial class. |
TestProjects/Spector/http/payload/multipart/src/Generated/Models/AnonymousModelContent.cs |
Renames the anonymous-body model and constructors. |
TestProjects/Spector/http/payload/multipart/src/Generated/FormDataHttpPartsNonString.cs |
Uses FloatContent in typed overloads. |
TestProjects/Spector/http/payload/multipart/src/Generated/FormDataHttpPartsContentType.cs |
Updates content-type operation parameter types. |
TestProjects/Spector/http/payload/multipart/src/Generated/FormDataHttpParts.cs |
Updates mixed-parts operation parameter types. |
TestProjects/Spector/http/payload/multipart/src/Generated/FormDataFile.cs |
Updates file-upload operation parameter types. |
TestProjects/Spector/http/payload/multipart/src/Generated/FormData.cs |
Updates multipart operation parameter types. |
TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs |
Uses the renamed retrieval model in runtime tests. |
TestProjects/Spector.Tests/Http/Payload/Multipart/MultipartTests.cs |
Updates runtime callers and model-name comments. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixPreservesExistingName/ExistingModels.cs |
Supplies existing Request names for preservation tests. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixPreservesCustomName/CustomizedModels.cs |
Updates explicit customization mappings. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixMappingBelongsToOriginalInput/CustomizedModel.cs |
Updates the direct-input ownership fixture. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixFallbackAvoidsMappedInputName/CustomizedModel.cs |
Updates the numeric-fallback customization fixture. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixCollisionPreservesMappedSuffixName/CustomizedModel.cs |
Reserves WidgetContent through a mapped model. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixCollisionPreservesCustomName/CustomizedModel.cs |
Reserves WidgetContent through customization. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/TestBuildName_ModelSuffixCollisionPreservesContractName/ExistingModel.cs |
Updates contract collision fixtures to Content. |
Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/ModelProviderTests.cs |
Revises suffix, usage, compatibility, and collision regressions. |
Microsoft.TypeSpec.Generator/src/Providers/ModelProvider.cs |
Implements usage-independent Request → Content conversion. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestMultipartFormDataModel_WithRequiredFilename_EmitsAugmentedOverloads.cs |
Updates required-filename constructor baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestMultipartFormDataModel_SingleRequiredFile.cs |
Updates required-file model baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestMultipartFormDataModel_OptionalFile.cs |
Updates optional-file model baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestMultipartFormDataModel_MultipleFiles.cs |
Updates multiple-file constructor baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestMultipartFormDataModel_MultiFileOnly.cs |
Updates file-array model baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/TestMultipartFormDataModel_MixedJsonAndMultipartUsage.cs |
Updates mixed-serialization model baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/RequestSuffixUsageIsReflectedInGeneratedCode(Output).cs |
Updates the output-only suffix regression baseline. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/RequestSuffixUsageIsReflectedInGeneratedCode(Input).cs |
Updates the input-only suffix regression baseline. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/RequestSuffixUsageIsReflectedInGeneratedCode(Input, Output).cs |
Updates the shared-model suffix regression baseline. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/TestData/ScmModelProviderTests/ModelSuffixDoesNotCollideWithCustomizedClient/CustomizedClients.cs |
Updates the customized-client collision fixture. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmModelProvider/ScmModelProviderTests.cs |
Revises generated-output and client-collision assertions. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_StringWithDefaultContentType.cs |
Updates the text serialization model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_StringFixedEnumPart_UsesUnderlyingValue.cs |
Updates the fixed string-enum model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_StringExtensibleEnumPart_UsesUnderlyingValue.cs |
Updates the extensible string-enum model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_SingleRequiredFile.cs |
Updates the required-file serialization model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_PrimitiveWithExplicitContentType_EmitsMediaType.cs |
Updates the explicit-content-type model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_PrimitiveDictionaryPart_UsesMultipartFormDataHelper.cs |
Updates the primitive-dictionary model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_PrimitiveArrayPart_EmitsPartPerElement.cs |
Updates the per-element primitive-array model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_PrimitiveArrayPart_AsSingleJsonPart.cs |
Updates the JSON primitive-array model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_OptionalFile.cs |
Updates the optional-file serialization model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_NullableValueTypePart_UnwrapsValue.cs |
Updates the nullable-value model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_NestedJsonModelPart.cs |
Updates the nested JSON-part model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_MultiFilePartWithContentType_OmitsMediaType.cs |
Updates the content-typed file-array model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_MultiFilePart.cs |
Updates the multiple-file serialization model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_ModelDictionaryPart_UsesModelReaderWriter.cs |
Updates the model-dictionary container name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_ModelArrayPart_EmitsPartPerElement.cs |
Updates the per-element model-array container name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_ModelArrayPart_AsSingleJsonPart.cs |
Updates the JSON model-array container name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_MixedJsonAndMultipartUsage.cs |
Updates the mixed-serialization model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_IntFixedEnumPart_UsesUnderlyingValue.cs |
Updates the fixed integer-enum model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_IntExtensibleEnumPart_UsesUnderlyingValue.cs |
Updates the extensible integer-enum model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_BinaryDataPart(WithoutDefaultContentType).cs |
Updates the binary-data model name without default content type. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_BinaryDataPart(WithDefaultContentType).cs |
Updates the binary-data model name with default content type. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_AllShapesCombined.cs |
Updates the combined-shapes model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MultipartFormDataSerializationDefinitions/TestData/MultipartFormDataSerializationDefinitionTests/TestSerialization_AllPrimitiveParts.cs |
Updates the all-primitives model name. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ModelFactoryProviders/TestData/ScmModelFactoryProviderTests/TestFactory_MultipartFormDataOnly_CarriesExperimentalAttribute.cs |
Updates the multipart factory baseline to FileContent. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ModelFactoryProviders/TestData/ScmModelFactoryProviderTests/TestFactory_MultipartAndRegularModels_Combined.cs |
Updates the multipart entry in the combined factory baseline. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ModelFactoryProviders/TestData/ScmModelFactoryProviderTests/TestFactory_MixedJsonAndMultipartUsage_CarriesExperimentalAttribute.cs |
Updates the mixed-usage factory baseline. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ModelFactoryProviders/ScmModelFactoryProviderTests.cs |
Updates factory lookup and assertion messages. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ClientProviders/TestData/ClientProviderTests/TestMultipartClient_UploadMethods_RequiredFileBody.cs |
Updates required-file upload parameter baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ClientProviders/TestData/ClientProviderTests/TestMultipartClient_UploadMethods_OptionalFileBody.cs |
Updates optional-file upload parameter baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ClientProviders/TestData/ClientProviderTests/TestMultipartClient_UploadMethods_OptionalBody.cs |
Updates optional-body upload parameter baselines. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ClientProviders/TestData/ClientProviderTests/TestMultipartClient_UploadMethods_MultiFileOnlyBody.cs |
Updates file-array upload parameter baselines. |
docs/naming-conventions.md |
Documents the corrected suffix rule and preservation exceptions. |
Review effort: Balanced
Jorge Rangel (jorgerangel-msft)
approved these changes
Nov 6, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Nov 7, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to no response for status checks
Nov 7, 2026
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.

Summary
Correct the naming rule introduced in #12493: model names ending in the terminal, case-sensitive suffix
RequestbecomeContent, not the reverse. Apply the rule regardless of model usage, including input, output, shared, and error models. ExistingContentnames are unchanged.Preserve exact names, handwritten customizations, previous contracts, and collision handling. The existing non-error
Response→Resultrule remains unchanged.Update naming regressions and generated-code baselines, regenerate affected multipart and SSE clients, update their runtime callers, and correct the naming-conventions documentation.
Validation
getFeatureLifecycleDetailsmetadata error in the status-code-range scenario; saved-input generation completed successfully.