by关键字绑定路径参数必须满足三条件:控制器注册到mvc.application、路由参数显式标注类型、方法参数名为by+键名首字母大写;任一不满足则参数为零值且不报错。

By关键字绑定路径参数必须满足三个硬性条件
不注册到 mvc.Application、不显式标注参数类型、方法名拼错大小写——任一条件不满足,ByUid 这类参数就永远是零值,且框架不报错。
- 控制器结构体必须通过
mvc.New(party).Handle(new(MyController))注册,不能用app.Get()直接挂路由 - 路由路径中参数必须带类型标注,例如
/{uid:int64},写成/{uid}或/{UID:int64}都会失效 - 方法参数名严格为
By+ 路由键名首字母大写,如路由含{user_id:string},参数只能是ByUserId string,ByUserid或By_ID均失败
BeforeActivation 是唯一能自定义子路径的入口
默认的 Get()、Post() 方法只响应根路径(如 /users),所有带变量的子路径(如 /users/{id:long})必须在 BeforeActivation 里手动绑定。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 绑定语法固定为
b.Handle("GET", "/{id:long}", "GetByID"),第三个参数是控制器内方法名字符串,不是函数引用 - 路径参数类型必须匹配:用
{id:long}才能注入int64,{id:int}在 Iris 12.2.5 中不识别,会返回 0 - 不要在
BeforeActivation外部调用b.Router().Get()等原生路由方法——它绕过 MVC 绑定机制,By参数不可用
ctx.Params() 和 ctx.URLParam() 完全不是一回事
新手最常混淆这两者:ctx.Params() 拿的是路径参数(/user/123 中的 123),ctx.URLParam() 拿的是查询参数(/user?id=123 中的 123)。
- 路径参数统一走
ctx.Params().GetInt64("uid"),拼错 key 名(如写成"UID")返回 0,无 panic -
ctx.URLParam("q")只对?q=abc有效,对/search/abc完全无效 - 如果同时需要两者,必须分别调用,不能混用;MVC 控制器方法签名里用
By接路径参数,查询参数仍得靠ctx显式取
启动服务前漏掉 .Run() 或 .Listen() 就等于没跑
写完 mvc.New(...).Handle(...) 后不调用 app.Run(iris.Addr(":8080")),程序会静默退出,浏览器访问 8080 空白或连接拒绝——这不是路由没配好,是 HTTP server 根本没起来。
- Iris v12+ 推荐用
app.Run(),它支持传入iris.Configuration控制超时、TLS 等;.Listen()是旧版兼容写法 - 若用了
iris.TLS()或自定义http.Server,必须用app.ConfigureHost(),否则 TLS 不生效 - 调试时加
app.Logger().SetLevel("debug"),能看到 MVC 注册了多少路由、参数绑定是否成功
By 参数绑定都发生在 mvc.Application 实例内部,一旦跳过 Handle() 直接走原生路由,整套机制就彻底失效。










