【发布时间】:2018-06-02 18:24:39
【问题描述】:
在向 Golang API 发出 POST 请求时,如果我发送 stringy-fied JSON 数据,它会返回成功,但是当我发送 JSON 数据时,它会返回 status 403 错误。
请帮助我了解这种行为以及如何使用POST 请求方法发送JSON 数据。
文件:main.go
package main
import (
"devmgmtv2/auth"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"log"
"net/http"
)
func main() {
router := mux.NewRouter()
auth.AuthInit(router)
ssid.SsidInit(router)
headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
router.HandleFunc("/auth/login", Login).Methods("POST", "OPTIONS")
log.Fatal(http.ListenAndServe(":8000", handlers.CORS(headersOk, originsOk, methodsOk)(router)))
}
func Login(w http.ResponseWriter, r *http.Request) {
//Create User Struct
var user User
json.NewDecoder(r.Body).Decode(&user)
userPassword := getUserPassword(user.User)
// call get value for that user
// check for equality if true, return the structure
// if false return error
if user.Password == userPassword {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("success"))
} else {
http.Error(w, "Forbidden", http.StatusForbidden)
}
}
【问题讨论】:
-
“当我以字符串格式(即原始文本)传递我的 JSON 但发送 JSON 时它有效”是什么意思? JSON 是一种文本格式,始终以“字符串”或“文本”形式发送。你做了什么究竟?
-
当我在做 JSON.stringify(data) 之后发送数据时它工作了,但是当我按原样发送数据时。它没有工作。但它曾经与 NodeJS 服务器一起工作
-
听起来你的客户端代码没有生成 JSON,那么你的 Go 没有问题。
-
@Flimzy 这是我的身体数据 -> let data = { "user": user, "password": password }
-
如果你想消费 JSON,你必须发送 JSON。我不知道 Node 如何序列化任意对象。所以:只需发送 JSON(而不是随机垃圾)。