编辑:解决了!服务器从/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操作。

10-06 15:55