package utils import ( "bytes" "github.com/gin-gonic/gin" "io/ioutil" "net/url" "strconv" ) // 同时从querystring和body里取参数 func GetArgument(c *gin.Context, key string, defaultValue string) string { v := c.Query(key) if v != "" { return v } if c.Request.Body == nil { return defaultValue } body, _ := c.GetRawData() c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) bodyArgs, err := url.ParseQuery(string(body)) if err != nil { return defaultValue } v = bodyArgs.Get(key) if v != "" { return v } return defaultValue } // 同时从querystring和body里取参数 func GetIntArgument(c *gin.Context, key string, defaultValue int64) int64 { v := c.Query(key) if v != "" { intV, err := strconv.ParseInt(v, 10, 64) if err != nil { return defaultValue } return intV } if c.Request.Body == nil { return defaultValue } body, _ := c.GetRawData() // 写回去, 不然下一次就读取不到了 c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) bodyArgs, err := url.ParseQuery(string(body)) if err != nil { return defaultValue } v = bodyArgs.Get(key) if v != "" { intV, err := strconv.ParseInt(v, 10, 64) if err != nil { return defaultValue } return intV } return defaultValue }