رفتن به محتوا

اتصال Multipart/Urlencoded

ShouldBind به‌صورت خودکار Content-Type را تشخیص می‌دهد و بدنه درخواست‌های multipart/form-data یا application/x-www-form-urlencoded را به struct متصل می‌کند. از تگ form در struct برای نگاشت نام فیلدهای فرم به فیلدهای struct و از binding:"required" برای اجباری کردن فیلدها استفاده کنید.

این معمولاً برای فرم‌های ورود، صفحات ثبت‌نام، یا هر ارسال فرم HTML استفاده می‌شود.

package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type LoginForm struct {
User string `form:"user" binding:"required"`
Password string `form:"password" binding:"required"`
}
func main() {
router := gin.Default()
router.POST("/login", func(c *gin.Context) {
var form LoginForm
// ShouldBind automatically selects the right binding based on Content-Type
if err := c.ShouldBind(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if form.User == "user" && form.Password == "password" {
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
} else {
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
}
})
router.Run(":8080")
}

تست

Terminal window
# Multipart form
curl -X POST http://localhost:8080/login \
-F "user=user" -F "password=password"
# Output: {"status":"you are logged in"}
# URL-encoded form
curl -X POST http://localhost:8080/login \
-d "user=user&password=password"
# Output: {"status":"you are logged in"}
# Wrong credentials
curl -X POST http://localhost:8080/login \
-d "user=wrong&password=wrong"
# Output: {"status":"unauthorized"}
# Missing required field
curl -X POST http://localhost:8080/login \
-d "user=user"
# Output: {"error":"Key: 'LoginForm.Password' Error:Field validation for 'Password' failed on the 'required' tag"}

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