如何在 Ktor 中设置一个类似于 Retrofit 的 `Retrofit.Builder().baseUrl(baseUrl) 的 basePath?
How to set a basePath in Ktor similar to Retrofit's `Retrofit.Builder().baseUrl(baseUrl)?
我正在通过转换一些当前正在使用 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
中做同样的事情?或者如果有 none,处理这个问题的最佳做法是什么?
你可以!
为此,您需要在实例化客户端时设置默认请求。
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
希望对您有所帮助:)
我正在通过转换一些当前正在使用 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
中做同样的事情?或者如果有 none,处理这个问题的最佳做法是什么?
你可以!
为此,您需要在实例化客户端时设置默认请求。
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
希望对您有所帮助:)