android - 如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?

标签 android kotlin ktor kotlin-multiplatform ktor-client

我正在尝试 Ktor通过转换一些当前正在使用的现有项目 Retrofit .

虽然我可以很容易地将请求转换为:

client.get {
    url("$BASE_URL/something/somepage/another")
}

总是添加 $BASE_URL 似乎很乏味每次到所有路径。在改造中,我们可以简单地执行以下操作:
Retrofit.Builder()
    .baseUrl(BASE_URL)
    .create(SomeServiceClass::class.java)

我试过使用 defaultRequest并设置 BASE_URL但显然你只能设置 url.host而不是全部basePath .

有没有办法在 Ktor 中做同样的事情? ?或者如果没有,处理这个问题的最佳做法是什么?

最佳答案

你可以!

为此,您需要在实例化客户端时设置默认请求。

val httpClient = HttpClient(Android) {
        defaultRequest {
            host = "my.zoo.com"
            url {
                protocol = URLProtocol.HTTPS
            }
        }
    }

val response = httpClient.get<List<CatsResponse>>(
        path = "animals/cats"
)


这将调用 https://my.zoo.com/animals/cats
希望能帮助到你 :)

关于android - 如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60399933/

相关文章:

android - 来自缓冲区字节数组的pdfrender android parcefiledescriptor

android - 我不能通过单击几个按钮来播放一种声音吗?

Android - 强制传感器?

java - 从 Java 转换为 Kotlin OnClickListener

kotlin - 为什么每个线程都会多次初始化惰性变量

java - Android fragment 翻译动画显示、隐藏

kotlin - 从 Kotlin 中的 Map 获取具有最大值的条目

android - 在 Kotlin 中的 Fragment 类之间切换

java - WAR - Gradle 多模块应用程序 - TypeNotPresentException

authentication - 来自 UserHashedTableAuth 的 Ktor 基本认证