Post 请求 Golang API 发送 JSON 和字符串化 JSON
Post request to Golang API to send JSON and stringy-fied JSON
在向 Golang API 发出 POST
请求时,如果我发送字符串化 JSON
数据 returns 成功,但是当我发送 JSON
returns 数据错误 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)
}
}
向任何 http 服务器发送 JSON 时,您始终必须使用 JSON.stringify()
。
不这样做会导致发送 [object Object]
...
有一些客户端库可以为您完成这种繁重的工作,但在幕后 JSON 始终作为字符串发送。
Node.JS 以相同的方式处理它...它接收字符串表示形式,通常在传入请求中 运行 之类的正文解析器从字符串中提取 JSON .所以它可能发生在幕后,但它仍然发生。
在向 Golang API 发出 POST
请求时,如果我发送字符串化 JSON
数据 returns 成功,但是当我发送 JSON
returns 数据错误 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)
}
}
向任何 http 服务器发送 JSON 时,您始终必须使用 JSON.stringify()
。
不这样做会导致发送 [object Object]
...
有一些客户端库可以为您完成这种繁重的工作,但在幕后 JSON 始终作为字符串发送。
Node.JS 以相同的方式处理它...它接收字符串表示形式,通常在传入请求中 运行 之类的正文解析器从字符串中提取 JSON .所以它可能发生在幕后,但它仍然发生。