5

我正在尝试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?或者如果没有,处理这个问题的最佳做法是什么?

4

1 回答 1

17

你可以!

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

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

希望能帮助到你 :)

于 2020-03-02T19:49:48.647 回答