向 Ktor 中的路由添加拦截器不起作用

Adding interceptor to routes in Ktor not working

我有一个 Route,对于每个 ApplicationCall,我想在响应中添加一个 header。

例如

routes {
   route("/cdn-cached") {
        intercept(ApplicationCallPipeline.Features){
           call.response.header(HttpHeaders.CacheControl, ...)
        }
        

        get(...) {...}
        post(...) {...}
        route(...) {...}
   }
}

这是一个过于简单的设置示例,但我期望的是,每次我在 /cdn-cached 路由下调用端点时,它都会附加 header。我确定我搞砸了什么,但我不知道是什么。

我需要什么来修复此代码?

注意:我有一个框架可以做很多动态的事情,到目前为止它可以做我想做的一切,现在我偶然发现了这个。我之所以这样说,是因为在每个人 ApplicationCall 中添加 header 并不是一个好的选择,例如 get、post 和路由。我可以这样做,但如果我可以像我在示例中描述的那样来做,我宁愿不这样做。

你可以拦截ApplicationCallPipeline.Call阶段来影响当前路由及其子路由:

route("/cdn-cached") {
    intercept(ApplicationCallPipeline.Call) {
        call.response.header("custom", "123")
    }

    // ...
}