Как перенаправить внутри в Ктор? - PullRequest
1 голос
/ 28 февраля 2020

Мне интересно, есть ли способ сделать внутреннее перенаправление, перенаправить или переадресацию ответа внутри Ktor.

call.respondRedirect("relative/url")

отправляет HTTP 302 или 301 в зависимости от флага permantent: Boolean. Я ищу что-то, что сделало бы то же самое без использования HTTP, просто внутри Ktor. Вот некоторая псевдо-маршрутизация того, чего я хочу достичь:

get("/foo") {
    if (call.parameters["something"] != null) {
        call.respondText("Yay, something!")
    } else {
        call.respondRedirect("/bar") // except without relying on client to handle HTTP redirects.
    }
}
get("/bar") {
    call.respondText("No thing :(")
}

Цель состоит в том, чтобы клиент не делал 2 запроса и не знал о происходящем перенаправлении.

Примечание: я знаю, что могу извлечь функцию для тела /bar и вызвать ее вместо responsdRedirect. Однако я хочу заставить Ktor справиться с этим так, чтобы он прошел весь необходимый жизненный цикл и конвейер со всеми перехватчиками. Это сделано для того, чтобы убедиться, что он обрабатывается так, как если бы это был внешний запрос, за исключением сетевого запроса туда и обратно.

Я ищу что-то вроде Express. js 'req.app.handle(req, res) как показано в первой половине этого ответа: { ссылка }. Потенциальное решение, которое я пока не мог понять, - это то, что TestApplicationEngine.handleRequestio.ktor:ktor-server-test-host) делает с pipeline.execute. Я думаю, я мог бы вызвать call.application.execute(), вопрос в том, как тогда построить объект ApplicationCall. Обратите внимание, что это для производственного использования, поэтому нет TestApplicationCall.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...