Draft
Conversation
- Add Context.GetRequestBody() method that caches request body bytes - Allows multiple reads of request body without consumption - Integrates with existing ShouldBindBodyWith* caching mechanism - Includes comprehensive tests and usage examples - Addresses issue gin-gonic#1974: Wrap Request.Body for reuse by Gin, middlewares and app code
- Add 'Get Request Body' section to docs/doc.md - Include usage examples and curl test commands - Document the new API for reusable request body access
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.
Implement body caching for form-urlencoded bindings so the request body can be read multiple times.
1. Cache-aware GetRawData()
Modified GetRawData in context.go to check for cached body bytes in the context (
BodyBytesKey) before reading from the stream.2. Body preservation in ShouldBindWith()
Modified ShouldBindWith in context.go to intercept
formandform-urlencodedbindings:BodyBytesKey).Request.Bodywith a freshio.NopCloserbuffer.This ensures
ParseFormworks on the restored body, and GetRawData can retrieve the cached body.3. Test Fixes
:8080, resolving local testing conflicts.Testing
All tests pass:
$ go test ./... ok github.com/gin-gonic/gin 0.247s ok github.com/gin-gonic/gin/binding (cached) ok github.com/gin-gonic/gin/render (cached)