You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:09:01