编辑:解决了!服务器从/whales重定向到/whales/,这将请求转换为GET。我的curl命令后面有斜杠,但是我的表单和 postman 请求却没有。
我的基本服务器始终以“GET”作为r.Method,即使对于来自Postman和html表单的发布请求也是如此。 r.Form始终是一个空映射。
我的代码:
func whaleHandler(w http.ResponseWriter, r *http.Request) {
fmt.Print(r.Method)
fmt.Print(r.Form)
}
func main() {
http.HandleFunc("/whales/", whaleHandler)
log.Fatal(http.ListenAndServe(":9002", nil))
}
并打印:
GETmap[]
我在这里做错了什么?预先谢谢大家!
编辑:curl一切正常,但是Postman和常规表单仍被视为GET请求。
curl -d "Name=Barry" -X POST http://localhost:9002/whales/
结果是:
POSTmap[]
,和
r.FormValue("Name")
吐出Barry
样本表格:
<form action="/whales" method="POST">
<div><input type="text" name="Name" placeholder="Name"></div>
<div><input type="text" name="Length" placeholder="Length"></div>
<div><input type="text" name="Type" placeholder="Type"></div>
<div><input type="submit" value="Save"></div>
</form>
以及
fmt.Print(r)
的完整输出,为了便于阅读,对其进行了格式化:&{GET
/whales/
HTTP/1.1
1
1
map[
Accept:[
text/html,
application/xhtml+xml,
application/xml;q=0.9,*\/*;q=0.8
]
Accept-Language:[en-US,en;q=0.5]
Accept-Encoding:[gzip, deflate]
Cookie:[io=08-aNjAMs8v6ntatAAAA]
Connection:[keep-alive]
Upgrade-Insecure-Requests:[1]
User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko/20100101 Firefox/58.0] Referer:[http://localhost:9002/whales/create]
]
{}
<nil>
0
[]
false
localhost:9002
map[]
map[]
<nil>
map[]
[::1]:61037
/whales/
<nil>
<nil>
<nil>
0xc420162400}
编辑:
示例 postman 请求,结果为r.Method =>“GET”
Posting with Postman
最佳答案
您在“/whales/”下注册了处理程序,但表单操作为“/whales”(不带斜杠)。在这种配置下,Go会将请求从/whales重定向到/whales/-大多数客户端选择通过GET请求进行跟踪。
根据您希望处理的其他URL,为“/whales”注册处理程序,或者将表单操作更改为“/whales/”。例如,如果您需要处理/whales/willy,请按原样保留处理程序并更改form操作。