ホームページ > バックエンド開発 > Golang > Go-Gin でリクエスト本文を複数回読み取る方法は?

Go-Gin でリクエスト本文を複数回読み取る方法は?

DDD
リリース: 2024-12-26 08:26:11
オリジナル
622 人が閲覧しました

How to Read a Request Body Multiple Times in Go-Gin?

Go-Gin でリクエスト本文を複数回読み取る方法

リクエスト データを検証するとき、多くの場合、元のリクエスト本文を保持しておく必要があります。さらなる処理。ただし、本文を複数回読み取ると、問題が発生する可能性があります。

問題:

次のコードは、検証を実行するためにリクエスト本文を読み取りますが、後続の機能のためにそれを保持できません。呼び出し:

func SignupValidator(c *gin.Context) {
    var bodyBytes []byte
    if c.Request.Body != nil {
        bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
    }
    fmt.Println(string(bodyBytes)) // empty
    c.Next()
}
ログイン後にコピー

解決策:

リクエスト本文に複数回アクセスするには、次の手順を使用します:

  1. リクエストを読むbody を一度取得して変数に保存します。
  2. 同じ body で新しいバッファを作成しますbytes.
  3. リクエストの本文を新しく作成したバッファに設定します。
func SignupValidator(c *gin.Context) {
    byteBody, _ := ioutil.ReadAll(c.Request.Body)
    c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(byteBody))

    fmt.Println(string(byteBody)) // contains the request body

    c.Next()
}
ログイン後にコピー

これで、後続の関数呼び出しは問題なく本文データにアクセスできるようになります。

以上がGo-Gin でリクエスト本文を複数回読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート