在 Ktor 中向路由添加拦截器不起作用
Posted
技术标签:
【中文标题】在 Ktor 中向路由添加拦截器不起作用【英文标题】:Adding interceptor to routes in Ktor not working 【发布时间】:2022-01-13 15:55:07 【问题描述】:我有一个Route
,对于每个ApplicationCall
,我想在响应中添加一个标头。
例如
routes
route("/cdn-cached")
intercept(ApplicationCallPipeline.Features)
call.response.header(HttpHeaders.CacheControl, ...)
get(...) ...
post(...) ...
route(...) ...
这是我设置的一个过于简单的示例,但我期望的是,每次我调用 /cdn-cached
路由下的端点时,它都会附加标头。我确定我搞砸了,但我不知道是什么。
我需要什么来修复此代码?
注意:我有一个框架可以做很多动态的事情,到目前为止它可以做我想做的一切,现在我偶然发现了这个。我之所以这么说,是因为在每个 ApplicationCall
中添加标题对我来说不是一个好选择,比如这里的 get、post 和 route。我可以这样做,但如果我可以像我在示例中描述的那样做的话,我宁愿不这样做。
【问题讨论】:
【参考方案1】:你可以拦截ApplicationCallPipeline.Call
阶段来影响当前路由及其子路由:
route("/cdn-cached")
intercept(ApplicationCallPipeline.Call)
call.response.header("custom", "123")
// ...
【讨论】:
谢谢!这似乎可以解决问题,但是在文档中它说像我这样的东西应该可以工作:ktor.io/docs/… 或者我误解了什么? 我已经更新了答案。无需拦截所有子路由。 这很奇怪,它可以在正常设置下工作,但在我的框架中,当我动态添加它时却不行。以上是关于在 Ktor 中向路由添加拦截器不起作用的主要内容,如果未能解决你的问题,请参考以下文章
反应:通过状态钩子在 loginHandler 函数中向 localStorage 添加令牌不起作用
在 ng-repeat 中向 ng-click 函数添加参数似乎不起作用
使用 freemarker 自托管的 ktor 网站不起作用