رفتن به محتوا

فرم پرس‌وجو و ارسال

هنگام پردازش یک درخواست POST، اغلب نیاز دارید مقادیر را هم از رشته پرس‌وجوی URL و هم از بدنه درخواست بخوانید. Gin این دو منبع را جدا نگه می‌دارد تا بتوانید به هر کدام به‌صورت مستقل دسترسی داشته باشید:

  • c.Query("key") / c.DefaultQuery("key", "default") — از رشته پرس‌وجوی URL می‌خواند.
  • c.PostForm("key") / c.DefaultPostForm("key", "default") — از بدنه درخواست application/x-www-form-urlencoded یا multipart/form-data می‌خواند.

این در APIهای REST رایج است که مسیر منبع را شناسایی می‌کند (از طریق پارامترهای query مانند id) در حالی که بدنه داده‌ها را حمل می‌کند (مانند name و message).

package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.POST("/post", func(c *gin.Context) {
id := c.Query("id")
page := c.DefaultQuery("page", "0")
name := c.PostForm("name")
message := c.PostForm("message")
fmt.Printf("id: %s; page: %s; name: %s; message: %s\n", id, page, name, message)
c.String(http.StatusOK, "id: %s; page: %s; name: %s; message: %s", id, page, name, message)
})
router.Run(":8080")
}

تست

Terminal window
# Query params in URL, form data in body
curl -X POST "http://localhost:8080/post?id=1234&page=1" \
-d "name=manu&message=this_is_great"
# Output: id: 1234; page: 1; name: manu; message: this_is_great
# Missing page -- falls back to default value "0"
curl -X POST "http://localhost:8080/post?id=1234" \
-d "name=manu&message=hello"
# Output: id: 1234; page: 0; name: manu; message: hello

همچنین ببینید