问题标签 [ktor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3887 浏览

kotlin - Ktor:如何在路由处理程序中检查身份验证?

我正在使用 ktor v0.9.2,并且我想根据用户是否经过身份验证,为同一路由发送不同的内容。

我遇到的问题是我无法访问authenticate { }块外的主体。

我的设置是这样的:

/protected路线工作正常,但在/路线中,主体始终为空。我认为这是一些管道的事情,但我有点迷茫。有人可以提供一些见解吗?谢谢!

0 投票
1 回答
274 浏览

kotlin - Hoverfly Ktor 客户端 Apache Kotlin

我尝试使用 Hoverfly 进行单元测试来模拟外部 API。

当我将 Apache 客户端与 ktor 一起使用时,它不起作用。但是对于像 khttp 这样的另一个客户端,它可以工作。任何想法为什么?

0 投票
1 回答
6435 浏览

kotlin - Ktor - 静态内容路由

我很想更好地了解 Ktor 如何处理静态内容的路由。我的静态文件夹(工作目录)中有以下层次结构:

我愿意为他们所有人服务。所以我直接在以下代码中使用了这段代码routing

效果很好,但问题是它正在处理所有请求,包括我的小请求get

一般来说,在 Ktor 中处理静态内容的最佳方法是什么?

这是代码

谢谢

0 投票
1 回答
1182 浏览

kotlin - 如何在 Ktor (Kotlin) 中管道的各个部分之间传递数据

我正在构建一个 API 并intercept(ApplicationCallPipeline.Call){}用于在每次路由执行之前运行一些逻辑。我需要将数据从拦截()方法传递给被调用的路由,并通过call.attributes.put()在拦截()中使用来设置数据,如下所示:

val userKey= AttributeKey<User>("userK") call.attributes.put(userKey, userData)

并使用检索userDatacall.attributes[userKey]。发生的情况是,call.attributes[userKey]这只适用于我设置了属性的拦截()方法。它在我需要它的路线上不起作用。它把我扔了 java.lang.IllegalStateException: No instance for key AttributeKey: userK

我想知道是否以正确的方式做事

0 投票
1 回答
8000 浏览

kotlin - 如何在 Ktor 中接收 JSON 对象?

我定义了数据类,配置了 gson 并创建了 rout 来处理 post 请求,如下所示:

以下 JSON 在 POST 请求中发送

输出显示所有空值。

从 call.request.receiveChannel() 读取数据确实显示正确的 JSON。所以我正在接收数据,但 call.receive() 似乎没有产生预期的结果。

手动获取 JSON 并尝试按如下方式创建 PurchaseOrder 但没有运气:

0 投票
1 回答
483 浏览

kotlin - Ktor 测试引擎 - 日志记录

我正在使用 ktor 测试引擎运行单元测试,并且在本地一切都很完美。但是,一旦我在 Travis 上部署,测试就会失败,而且测试引擎似乎运行不正常:

不幸的是,在跟踪模式下没有足够的信息。( <logger name="io.ktor.server.testing" level="TRACE"/>)

您知道我们如何激活更多日志进行调查吗?或者如果你有任何其他的想法来解决它?

如果你告诉我 Travis 没有过时,不推荐,我也可以换。

谢谢

0 投票
1 回答
166 浏览

android - Ktor api 不会改变和刷新

我正在使用 ktor 使用 kotlin 创建 rest api,但是当我更改 api 并再次运行时,响应不会改变。

这是我的代码

第一次运行它时工作正确并显示在 localhost:8080

你好

但如果我改变

call.respondText("Hi", ContentType.Text.Plain)

call.respondText("Hello", ContentType.Text.Plain)

并再次运行它响应没有变化和钢在 localhost:8080 中显示Hi

更新

如果我关闭 android studio 并再次打开它并运行它的工作并显示Hello 但如果我再次更改任何内容都不会改变

我不知道为什么会这样。

0 投票
1 回答
181 浏览

ktor - KTOR:如何在呼叫处理之前找到位置信息?

我做了一个自定义功能,应该检查用户使用请求的权限。我可以监控请求 LocationInfo 吗?可以这样看吗?

那是我的功能代码:

你怎么看,我正在使用具有权限的 UserRights 数据类。“accesTo” - 是用户可以使用的位置名称列表(格式可以更改)。功能必须在请求处理之前检查“accesTo”列表中包含的位置名称。

谢谢你的帮助!

UPD:位置代码:

0 投票
1 回答
1033 浏览

kotlin - 在 Ktor 0.9.3 中导入另一个配置文件会引发异常

在 Ktor 0.9.3 应用程序中,我希望.conf为不同的环境提供不同的文件,我在其中扩展了一个主.conf文件。但是,我收到以下异常:

这是我的application.conf文件:

以及我想使用的扩展它:

任何想法出了什么问题以及如何解决它?

0 投票
2 回答
2803 浏览

kotlin - 获取 Ktor http 请求的内容

在路由功能之前,如何使 Ktor 功能从 ApplicationCall 上下文中获取内容?主要目标是获取而不是消费,以便所有下一个拦截器都可以使用它。

如果我们要这样做:

或者像这样

我们将进行下一步:

主要思想是在路由功能处理之前记录请求内容(如果它是 Json 或 UrlEncoded),并记录每个响应内容。