Skip to content
Server Plugin

DoubleReceive

所需依賴項io.ktor:ktor-server-double-receive

程式碼範例 double-receive

原生伺服器
Ktor 支援 Kotlin/Native,並允許您在沒有額外執行環境或虛擬機器下執行伺服器。
支援:✅

DoubleReceive 外掛提供多次接收請求主體的能力,且不會拋出 RequestAlreadyConsumedException 例外。如果某個外掛已經消耗了請求主體,導致您無法在路由處理器中接收它,這可能就很有用。例如,您可以使用 DoubleReceive 透過 CallLogging 外掛來記錄請求主體,然後在 post 路由處理器內部再次接收主體。

DoubleReceive 外掛使用實驗性 API,預計在未來的更新中會演進,並可能導致破壞性變更。

新增依賴項

若要使用 `DoubleReceive`,您需要在建置腳本中納入 `ktor-server-double-receive` artifact:

Kotlin
Groovy
XML

安裝 DoubleReceive

若要將 `DoubleReceive` 外掛[安裝](#install)到應用程式, 請將其傳遞給指定[模組](

模組
模組允許您透過分組路由來組織應用程式。
)中的 `install` 函式。 下方的程式碼片段展示了如何安裝 `DoubleReceive` ...

  • ... 在 `embeddedServer` 函式呼叫內。
  • ... 在明確定義的 `module` 內,該 `module` 是 `Application` 類別的一個擴充函式。
kotlin
kotlin

`DoubleReceive` 外掛也可以[安裝](#install-route)到特定的路由。 如果您需要為不同的應用程式資源設定不同的 `DoubleReceive` 配置,這可能很有用。

安裝 DoubleReceive 後,您可以多次接收請求主體,並且每次呼叫都返回相同的實例。 例如,您可以使用 CallLogging 外掛啟用請求主體的日誌記錄...

kotlin
install(CallLogging) {
    level = Level.TRACE
    format { call ->
        runBlocking {
            "Body: ${call.receiveText()}"
        }
    }
}

... 然後在路由處理器內部再次取得請求主體。

kotlin
post("/") {
    val receivedText = call.receiveText()
    call.respondText("Text '$receivedText' is received")
}

您可以在此處找到完整範例:double-receive

配置 DoubleReceive

在預設配置下,DoubleReceive 提供將請求主體接收為以下類型的能力:

  • ByteArray
  • String
  • Parameters
  • ContentNegotiation 外掛使用的資料類別

依預設,DoubleReceive 不支援:

  • 從同一個請求接收不同類型;
  • 接收流或通道

如果您不需要從同一個請求接收不同類型,或不需要接收流或通道,請將 cacheRawRequest 屬性設定為 false

kotlin
install(DoubleReceive) {
    cacheRawRequest = false
}