Android传递JSON到VB.NET WebService遇400错误及解决方案
解决Android向.NET WebService传递JSON时返回Bad Request的问题
我之前也碰到过完全一样的状况:用Android Studio写的代码传递有效的JSON对象/数组到.NET WebService,却一直返回Bad Request,后来才发现问题核心是.NET WebService接收JSON的方式不对,再加上Android端的写入方式有小细节需要调整。
问题回顾
Android端已经正确构造了JSON,也设置了Content-Type: application/json请求头,但WebService端试图用字符串参数接收JSON后手动反序列化,结果根本没接收到数据,直接导致请求失败。
解决方案
1. 调整.NET WebService(VB.NET)
核心思路是用DataContract定义对应的数据结构,让WCF自动处理JSON的序列化和反序列化,不需要手动操作反序列化逻辑。
第一步:定义接口与数据契约
<OperationContract()> Function HReceiver(horary As Horar) As String <DataContract()> Public Class Horar <DataMember()> Public Property horary As List(Of Horari) End Class <DataContract()> Public Class Horari <DataMember()> Public Property id As String <DataMember()> Public Property name As String End Class
第二步:实现服务方法
<WebInvoke(ResponseFormat:=WebMessageFormat.Json, UriTemplate:="Change/")> Function HReceiver(horar As Horar) As String Implements IService.HReceiver Dim result As String ' 直接使用自动序列化后的对象,无需手动反序列化 result = horar.horary(0).name Return result End Function
这样WCF会自动把请求中的JSON映射到Horar对象上,不需要再手动调用反序列化方法,从根源解决了接收不到JSON的问题。
2. 修改Android端代码
只需要把原来的writeBytes替换为writeChars,确保JSON数据能正确编码传递:
// 替换原有的os.writeBytes(...)代码 os.writeChars(URLEncoder.encode(jsonObject.toString(), "UTF-8"));
调整完成后,WebService就能正常接收Android端传递的JSON数据,不会再返回Bad Request了。
内容的提问来源于stack exchange,提问作者Chungyen Tsai
相关产品推荐
相关产品推荐

