为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我将 DELETE 路由器放在 GET 之后,DELETE 端点没有被触发

为什么我将 DELETE 路由器放在 GET 之后,DELETE 端点没有被触发

Go
慕虎7371278 2023-06-19 15:39:25
我正在使用 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。


查看完整回答
反对 回复 2023-06-19
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

Gorilla/mux 按照您定义的顺序匹配路由。在不指定 Http 方法的情况下,无论您从邮递员中选择了什么,它都会匹配它,即 GET、DELETE

例如,您有一个路由 /todo/1 并且未指定方法,它将在 GET、DELETE、POST 和 PUT 的情况下运行。

注意 在第一个方法下定义的具有方法 DELETE 的相同路由将永远不会被触发。


查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信