如何解决从 Kotlin 调用 .svc 时,org.ksoap2.transport.HttpResponseException 400 错误请求错误
我看过其他帖子,但似乎没有帮助。问题似乎是将参数添加到请求中。请注意,这是一个 .svc —— 不是 wsdl。 C# .svc 文件具有以下数据协定:
[DataContract]
public class MyMethod_In
{
[DataMember]
public string rc;
}
Kotlin 代码:(常量取出方便阅读,改名以保护无辜)
val soapObject = SoapObject("https://qa.mysite.com/ws/MyService.svc/","MyMethod")
soapObject.addProperty("rc","xyz")
val envelope = SoapSerializationEnvelope(SoapEnvelope.VER11)
envelope.setoutputSoapObject(soapObject)
envelope.dotNet = true
val httpTransport = HttpTransportSE("https://qa.mysite.com/ws/MyService.svc/MyMethod")
try {
httpTransport.call("https://qa.mysite.com/ws/MyService.svc/MyMethod",envelope)
blah blah
}
catch (e: Exception) {
exception happens with 400 error
}
问题似乎出在 soapObject.addProperty
行上。我还尝试了其他代码,在其中构建属性信息并设置名称、类型和值,但我仍然总是收到 400 错误。我尝试使用一种类型的字符串和一种类型的 JSON,但没有任何区别。
我不完全确定某些硬编码值,但我似乎正确地调用了该服务,因为我尝试了另一个没有输入参数的服务,这运行良好并得到了响应。
我可能遗漏了一件小事,但找不到。关于为什么错误请求的任何想法?谢谢
解决方法
为 okhttp3,版本 4.2.0 解决了这个问题。正如我所怀疑的,我需要传递 JSON 数据。这段代码做到了:
val json = "{ \"rc\":\"xyz\" }"
val mediaTypeJson = "application/json; charset=utf-8".toMediaType()
val requestBody = json.toString().toRequestBody(mediaTypeJson)
val request = Request.Builder()
.url("https://qa.mysite.com/ws/MyService.svc/MyMethod")
.post(requestBody)
.build()
可能应该清理它并使用 gson 或其他东西,但至少这是有效的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。