Add response content negotiation with [Writes] and ConnegMode#2437
Merged
jeremydmiller merged 1 commit intomainfrom Apr 4, 2026
Merged
Add response content negotiation with [Writes] and ConnegMode#2437jeremydmiller merged 1 commit intomainfrom
jeremydmiller merged 1 commit intomainfrom
Conversation
Implements response-side content negotiation where methods decorated with
[Writes("content-type")] are discovered on handler types and code-generated
as Accept header-based dispatch. Supports multiple content type writers per
endpoint, Loose mode (JSON fallback, default) and Strict mode (406 Not
Acceptable), and a [StrictConneg] ModifyHttpChainAttribute.
- [Writes] attribute to mark methods as content type writers
- [Reads] attribute placeholder for future request body negotiation
- ConnegMode enum (Loose/Strict) on HttpChain
- [StrictConneg] attribute for per-endpoint strict mode
- ContentNegotiationWriterPolicy as IResourceWriterPolicy
- Code-generated Accept header branching (zero runtime reflection)
- 7 integration tests via Alba
- Documentation page with usage guide
Closes #2406
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2d00e2a to
701e9d6
Compare
This was referenced Apr 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
[Writes("content-type")]attribute for marking methods as content type-specific response writersContentNegotiationWriterPolicy(IResourceWriterPolicy) discovers[Writes]methods and generates Accept header-based dispatch codeConnegModeenum:Loose(default, JSON fallback) vsStrict(406 Not Acceptable)[StrictConneg]ModifyHttpChainAttribute for per-endpoint strict modeConnegModeproperty onHttpChainfor programmatic configuration[Reads("content-type")]attribute placeholder for future request body negotiationCloses #2406
Test plan
dotnet test src/Http/Wolverine.Http.Tests/ --framework net9.0 --filter ContentNegotiationTests(7/7 pass)🤖 Generated with Claude Code