How to Modify Request Parameters through Middleware
Before learning how to modify request parameters, please first understand some details about request parameter input: Request 🔥
Custom Parameter Overriding
The simplest way to modify request parameters is to override client-submitted parameters through custom parameters. Since custom parameters have the highest priority in parameter parsing, when fully retrieving request parameters (not through specific submission methods), custom parameters will override parameters submitted by other methods. This method of modification is common, especially when using standard routing, where parameters are received as a struct
object, and the underlying layer retrieves all parameters and then converts them to a struct
object.
However, if the user obtains parameters through r.GetQuery, r.GetForm
, custom parameter overriding will be ineffective. Methods like r.Get
or r.GetRequest
for parameter retrieval can also achieve parameter overriding effects.
Modifying Parameters for Specific Request Methods
It's also possible to modify the original parameters in middleware by altering r.URL.RawQuery
or r.Body
, but after modification, it's necessary to call r.ReloadParams()
to indicate that the request parameters will need to be re-parsed in the next retrieval.
Precautions for Modifying Request Body through Middleware
A common issue when modifying r.Body
through middleware is that r.Body
can only be read once, and subsequent reads will not retrieve the data, which is by the design of the standard library http.Request
. In the GoFrame
framework's ghttp.Request
object, continuous reading of the Body
content is allowed using the framework's ghttp.Request
GetBody
, GetBodyString
methods.
However, if you directly read r.Body
using the standard library's http.Request
object within middleware, it is recommended to reassign r.Body
or wrap and reassign it using io.NopCloser
to facilitate further reading of Body
content by subsequent middleware or processes.