我正在使用 Golang 创建 restful API,我按索引将删除路由器放在 getOne 路由器之后,删除路由器从未被触发?我不知道为什么?当我反转它们时,它起作用了!有人可以知道原因吗??这是为了使用 Golang 构建 Restful API。无效:myRouter.HandleFunc("/article", createNewArticle).Methods("POST")myRouter.HandleFunc("/article/{id}", getOneArticle)myRouter.HandleFunc("/article/{id}", deleteArticle).Methods("DELETE")作品!myRouter.HandleFunc("/article", createNewArticle).Methods("POST")myRouter.HandleFunc("/article/{id}", deleteArticle).Methods("DELETE")myRouter.HandleFunc("/article/{id}", getOneArticle)当我使用带有 DELETE 方法的邮递员测试 api 时,它总是触发 getOneArticle 并响应删除项目,但实际上并没有在数据库中删除!
2 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
你正在使用大猩猩/多路复用器。当收到 HTTP 请求时,此路由器会尝试按照您添加它们的顺序匹配路由。
当您在不指定 HTTP 方法的情况下添加路由时,它适用于所有 HTTP 方法。
因此,如果与 DELETE 方法匹配的更具体的路由首先出现,那么它将匹配 DELETE 方法调用,下一个路由将匹配所有方法。虽然它也会匹配 DELETE,但由于它前面的路由,实际的 DELETE 调用永远不会到达它。
但是如果你反转它们,没有指定 HTTP 方法的路由将匹配所有方法,包括 DELETE。
宝慕林4294392
TA贡献2021条经验 获得超8个赞
Gorilla/mux 按照您定义的顺序匹配路由。在不指定 Http 方法的情况下,无论您从邮递员中选择了什么,它都会匹配它,即 GET、DELETE
例如,您有一个路由 /todo/1 并且未指定方法,它将在 GET、DELETE、POST 和 PUT 的情况下运行。
注意 在第一个方法下定义的具有方法 DELETE 的相同路由将永远不会被触发。
- 2 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消