rest - Golang gorilla mux REST api 在使用 PUT 和 DELETE 方法时出现 405 错误

标签 rest go mux

Golang gorilla mux REST api 在使用 PUT 和 DELETE 方法时出现 405 错误。但是 GET 和 POST 方法工作正常。

我使用 postman 测试我的 REST api 服务器,GET 和 POST 请求工作正常,但 PUT 和 DELETE 方法不起作用并给出 错误 405

...
...
func updateBook(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "application/json")
    params := mux.Vars(r)
    for index, item := range books {
        if item.ID == params["id"]{
            books = append(books[:index], books[index+1:]...)
            var book Book
            _ = json.NewDecoder(r.Body).Decode(&book)
            book.ID = params["id"]
            books = append(books, book)
            json.NewEncoder(w).Encode(books)
            return
        }
    }
}

func deleteBook(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "application/json")
    params := mux.Vars(r)
    for index, item := range books {
        if item.ID == params["id"]{
            books = append(books[:index], books[index+1:]...)
            break
        }
    }
    json.NewEncoder(w).Encode(books)
}



func main() {
    // INIT router
    r := mux.NewRouter()

    // Mock data
    books = append(books, Book{
    ID: "1",
    Isbn: "43432",
    Title: "Book first",
    Author: &Author{
        FirstName: "Vishal",
        LastName: "Sharma",
    },
    })

    // Route handlers / Endpoints
    r.HandleFunc("/api/books", getbooks).Methods("GET")
    r.HandleFunc("/api/books/{id}", getBook).Methods("GET")
    r.HandleFunc("/api/books", createBook).Methods("POST")
    r.HandleFunc("api/books/{id}", updateBook).Methods("PUT")
    r.HandleFunc("api/books/{id}", deleteBook).Methods("DELETE")

    log.Fatal(http.ListenAndServe(":3000", r))
}

最佳答案

正如评论中指出的那样,这是一个错字。

r.HandleFunc("api/books/{1}", deleteBook).Methods("DELETE")

我在 api/books/{1} 之前缺少/正斜杠

正确的语法是
r.HandleFunc("/api/books/{1}", deleteBook).Methods("DELETE")

关于rest - Golang gorilla mux REST api 在使用 PUT 和 DELETE 方法时出现 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61871767/

相关文章:

rest - 如何将参数传递给MiddlewareFunc?

json - 使用Golang的示例JSON响应

c# - 具有多个参数的 WCF Rest GET

java - 在Jax中连接Hadoop(Hive API)数据库-RS Rest Service-Netbeans

linux - gccgo 精确

go - 将 GoRoutine 绑定(bind)到 CPU 内核

docker - 使用 gRPC 进行容器间通信

google-app-engine - 是否可以在 Google appengine 标准环境中使用 Gorilla mux 路由器?

java - CXF 贾克斯 |生成的 wadl 中不存在复杂的响应类型

node.js - 仅使用一个回调并行运行异步