如何解决在 KtorClient 的 DefaultRequest 中声明 ContentType = Application.Json 后,我可以更改特定请求的 ContentType 标头吗
我正在处理我的 android 项目,我正在制作一个请求功能,用于上传发出如下请求的文件,
httpClient.put(uri) {
body = MultiPartFormDataContent(formData {
append("file",fileContent,Headers.build {
append(HttpHeaders.ContentType,fileMimeType)
append(HttpHeaders.ContentDisposition,ContentDisposition.File.withParameter(ContentDisposition.Parameters.FileName,fileOriginalName))
})
})
}
所以你可以看到这个请求有一个 ContentType 标头,但我已经在我的 Ktor HttpClient 中声明了 ContentType 标头,
install(DefaultRequest) {
url {
protocol = URLProtocol.HTTP
host = baseURL
}
headers {
append(HttpHeaders.ContentType,ContentType.Application.Json)
append(HttpHeaders.Authorization,accessToken)
append(USER,user)
}
}
所以我的问题是我的请求将采用哪种 ContentType?如果它不能接受我在请求函数中指定的 ContentType,那么如何让它接受与默认值不同的 ContentType?
解决方法
如果您尝试在 Content-Type
功能中设置 DefaultRequest
标头,那么您将获得 io.ktor.http.UnsafeHeaderException: Header(s) [Content-Type] are controlled by the engine and cannot be set explicitly
。
因此,如果您删除 append(HttpHeaders.ContentType,ContentType.Application.Json)
行,则请求的 Content-Type
将是 multipart/form-data
,而 Content-Type
正文部分的 file
‒ 值为fileMimeType
变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。