http.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package utils
  2. import (
  3. "bytes"
  4. "github.com/gin-gonic/gin"
  5. "io/ioutil"
  6. "net/url"
  7. "strconv"
  8. )
  9. // 同时从querystring和body里取参数
  10. func GetArgument(c *gin.Context, key string, defaultValue string) string {
  11. v := c.Query(key)
  12. if v != "" {
  13. return v
  14. }
  15. if c.Request.Body == nil {
  16. return defaultValue
  17. }
  18. body, _ := c.GetRawData()
  19. c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body))
  20. bodyArgs, err := url.ParseQuery(string(body))
  21. if err != nil {
  22. return defaultValue
  23. }
  24. v = bodyArgs.Get(key)
  25. if v != "" {
  26. return v
  27. }
  28. return defaultValue
  29. }
  30. // 同时从querystring和body里取参数
  31. func GetIntArgument(c *gin.Context, key string, defaultValue int64) int64 {
  32. v := c.Query(key)
  33. if v != "" {
  34. intV, err := strconv.ParseInt(v, 10, 64)
  35. if err != nil {
  36. return defaultValue
  37. }
  38. return intV
  39. }
  40. if c.Request.Body == nil {
  41. return defaultValue
  42. }
  43. body, _ := c.GetRawData()
  44. // 写回去, 不然下一次就读取不到了
  45. c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body))
  46. bodyArgs, err := url.ParseQuery(string(body))
  47. if err != nil {
  48. return defaultValue
  49. }
  50. v = bodyArgs.Get(key)
  51. if v != "" {
  52. intV, err := strconv.ParseInt(v, 10, 64)
  53. if err != nil {
  54. return defaultValue
  55. }
  56. return intV
  57. }
  58. return defaultValue
  59. }