2 回答
TA贡献1951条经验 获得超3个赞
答案在ParseForm's source innet/http/request.go
if r.Method == "POST" || r.Method == "PUT" || r.Method == "PATCH" {
r.PostForm, err = parsePostForm(r)
}
如果方法是 POST、PUT 或 PATCH,它只会解析 POST 正文。
r.Method = "POST"您可以通过在调用之前添加来强制执行此操作r.ParseForm:
r.Method = "POST"
r.ParseForm()
TA贡献1777条经验 获得超10个赞
https://golang.org/pkg/net/http/#Request
表单包含解析后的表单数据,包括 URL 字段的查询参数和 PATCH、POST 或 PUT 表单数据。该字段仅在调用 ParseForm 后可用。HTTP 客户端忽略 Form 而使用 Body。
如果我们查看代码,ParseForm我们会看到:
if r.PostForm == nil {
if r.Method == "POST" || r.Method == "PUT" || r.Method == "PATCH" {
r.PostForm, err = parsePostForm(r)
}
if r.PostForm == nil {
r.PostForm = make(url.Values)
}
}
最简单的方法是让它认为这是一个 POST 请求(然后再将其设置回来,以防您以后需要真正的方法):
method := r.Method
r.PostForm == nil // this line may necessary
r.Method = http.MethodPost
r.ParseForm()
r.Method = method
- 2 回答
- 0 关注
- 223 浏览
添加回答
举报
