iris框架中,iris.get等顶层函数是app.get的快捷封装,必须在iris.new()后、app.run()前调用;子路由需用对应实例(如api.get)注册,不可混用;同一路径多方法需用app.any或链式注册,且iris按方法严格分离路由,不匹配即404。

iris.Router 的 GET/POST 等方法怎么调用
直接用 iris.Get、iris.Post、iris.Put 这类顶层函数最简单,它们是 app.Get、app.Post 的快捷封装,底层都注册到默认路由器。但要注意:这些函数必须在 iris.New() 之后、app.Run() 之前调用,否则路由不会生效。
常见错误是把路由注册写在 app.Run() 后面,或者误以为能跨文件延迟注册(实际不能,Iris 不支持运行时动态挂载未初始化的路由)。
-
iris.Get("/user", handler)等价于app.Get("/user", handler) - 如果用了子路由器(
app.Party("/api")),就必须用该子路由实例的方法,比如api.Get("/list", handler),不能混用iris.Get - 多个方法共用同一路径?用
app.Any("/form", handler)或显式链式注册:app.Get("/form", getHandler).Post("/form", postHandler)
如何限制路由只接受特定 HTTP 方法(如仅 POST)
Iris 默认不自动校验请求方法是否匹配——它靠你注册时指定的方法来分发。也就是说,如果你只注册了 app.Post("/login", h),那对该路径发 GET 请求会直接 404(前提是没其他路由兜底)。这和某些框架“注册一次、手动检查 method”不同,是真正的按 method 分离路由树。
但要注意:如果你用 app.Any 或通配注册,就得自己在 handler 里判断 ctx.Method(),否则无法阻止非法 method 访问。
- 安全起见,敏感操作(如删除、支付回调)务必只用对应 method 注册,别图省事用
Any - 调试时发现 405 Method Not Allowed?大概率是客户端 method 和路由注册 method 不一致,检查
curl -X POST是否写成了GET - 想统一返回 405?可以加中间件拦截非允许 method,但通常没必要——Iris 的 404 已经足够说明“该 method 无此路由”
为什么 iris.Get 不生效或被忽略
最常见原因是路径冲突或注册顺序问题。Iris 路由匹配是**从上到下第一个完全匹配的路由**,且带参数的路由(如 /user/{id:int})会优先于静态路由(如 /user/me)——如果静态路由写在后面,它就永远匹配不到。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
另一个隐形坑:路径末尾斜杠。Iris 默认不自动重定向 /api → /api/,两者算不同路由。所以 app.Get("/api", h) 和 app.Get("/api/", h) 是两条独立路由。
- 检查是否有更宽泛的通配路由(如
app.Get("/{p:path}", fallback))写在前面,把你的路由挡掉了 - 用
app.Logger().SetLevel(iris.LogDebug)开启 debug 日志,启动时会打印所有注册的路由表,方便核对 - 确保 handler 函数签名正确:
func(ctx iris.Context),少一个参数或类型不对会导致 panic 而不是静默失败
处理 OPTIONS 预检请求(CORS 场景)
浏览器跨域请求前会先发 OPTIONS,Iris 不自动响应它。你需要显式注册:app.Options("/data", corsHandler),或者用 app.Any 统一处理。
不过更推荐用官方 iris/cors 中间件,它会自动注册 OPTIONS 并设置响应头,比手写更可靠:
app.Use(cors.New(cors.Config{
AllowOrigins: []string{"https://example.com"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
}))
注意:中间件注册顺序很重要,cors 必须在路由注册之前调用(Use 在 Get/Post 前),否则预检请求进不到中间件就被 404 了。
手动注册 OPTIONS 时,别忘了调用 ctx.StatusCode(204) 并清空 body,否则某些客户端可能报错。










