【问题标题】:How to set a basePath in Ktor similar to Retrofit's `Retrofit.Builder().baseUrl(baseUrl)?如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?
【发布时间】:2020-06-09 12:01:06
【问题描述】:

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

虽然我可以轻松地将请求转换为:

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 中做同样的事情?或者如果没有,处理此问题的最佳做法是什么?

【问题讨论】:

    标签: android kotlin ktor kotlin-multiplatform ktor-client


    【解决方案1】:

    你可以!

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

    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

    希望对你有帮助:)

    【讨论】:

    • 我明白了。这只是确认您不能设置基本路径,但可以设置基本 url。我可以再问一个关于 ktor 的问题吗?你能帮我一下吗。你知道如何在 Ktor 中设置 SSL 吗?
    • 在默认请求中,您可以在请求生成器HttpRequestBuilder 中提供任何您想要的内容。查看课程以查看所有选项。 defaultRequest { host = "animals.zoo.com" url { protocol = URLProtocol.HTTPS //将方案设置为 https。 } }
    猜你喜欢
    • 2011-08-13
    • 2021-04-05
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多