Go-Gin ミドルウェアでリクエスト本文を複数回取得する
Web フレームワークである Go-Gin では、開発者が次のようなシナリオに遭遇する可能性があります。リクエストの本文を複数回読み取る必要があります。これは、本体データが検証目的で使用され、後で後続の関数に渡される場合に必要になります。
この問題を解決する 1 つのアプローチは、検証を実行する前に本体を変数に読み取り、本体をその変数に復元することです。次の関数に進む前に元の状態に戻ります:
func SignupValidator(c *gin.Context) { var bodyBytes []byte var bodyBytesCopy []byte if c.Request.Body != nil { bodyBytes, _ = ioutil.ReadAll(c.Request.Body) } copy(bodyBytesCopy, bodyBytes) // Save body for later use var user entity.User if err := c.ShouldBindJSON(&user); err != nil { // Validation code c.Abort() return } c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytesCopy)) // Restore original body c.Next() }
このアプローチでは、ioutil.ReadAll 関数を使用して元のストリームの本文を読み取り、検証に使用するコピーを作成します。その後、元のボディが復元され、後続の関数がそれにアクセスできるようになります。
以上がGo-Gin ミドルウェアでリクエスト本文を複数回読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。