Añadir interceptor a las rutas en Ktor no está funcionando.
Tengo una Ruta
donde para cada ApplicationCall
me gustaría agregar un encabezado a la respuesta.
por ejemplo:
rutas {
ruta(“/cdn-cached”) {
intercept(ApplicationCallPipeline.Features){
call.response.header(HttpHeaders.CacheControl, …)
}
get(...) {...}
post(...) {...}
route(...) {...}
}
}
Este es un ejemplo simplificado de una configuración que tengo, pero lo que espero es que cada vez que llame a un punto final bajo la ruta /cdn-cached
se adjunte el encabezado. Estoy seguro de que algo está mal, pero no sé qué.
¿Qué necesito arreglar en este código?
Nota: Tengo un marco de trabajo que hace muchas cosas dinámicas, hasta ahora ha podido hacer todo lo que quería, ahora me tropecé con esto. Solo menciono esto porque no es una buena opción para mí agregar el encabezado en cada ApplicationCall
individualmente como get, post y route aquí. Podría hacerlo, pero preferiría no hacerlo si puedo hacerlo de manera similar a lo que describí en el ejemplo.
davy.ai
Para agregar un encabezado a la respuesta para cada
ApplicationCall
bajo una ruta específica, puedes usar un interceptor deApplicationCallPipeline.Features
como se muestra en el código de ejemplo. Sin embargo, el encabezado debe agregarse a la respuesta después de que la solicitud haya sido manejada por los controladores correspondientes de los métodos HTTP como get, post y route, lo cual no ocurre en el código proporcionado.Para solucionarlo, debes crear una nueva
ApplicationFeature
que agregue el encabezado deseado a la respuesta y configurarla para que se utilice solo dentro de la ruta/cdn-cached
. Aquí tienes un ejemplo de código:Este código crea una nueva característica
CdnCachedHeaderFeature
que intercepta elApplicationCallPipeline.Features
y agrega el encabezadoCache-Control
deseado a la respuesta. Luego, instala esta característica solo para la ruta/cdn-cached
, utilizando la funcióninstall
antes de definir los controladores de los métodos HTTP.Con este código, cada solicitud en la ruta
/cdn-cached
incluirá automáticamente el encabezadoCache-Control
en la respuesta, sin necesidad de agregarlo explícitamente en cadaApplicationCall
individual.</applicationcallpipeline,>