【发布时间】:2019-10-31 03:01:37
【问题描述】:
我知道已经有一个非常相似的问题here,但不幸的是,上面的答案对我没有帮助。
我想通过Unity Webrequest 将一些数据POST 发送到 RESTful Web 服务。正如the documentation 所说,
postData中的数据会被转义,然后解释成一个字节 通过 System.Text.Encoding.UTF8 流式传输。
postData 中的数据以 JSON 格式存储。远程 Web 服务将使用 NewtonSoft.Json 反序列化所有传入数据。
不幸的是,远程 Web 服务抛出了一个JsonReaderException,并带有消息"Unexpected character encountered while parsing value: %. Path '', line 0, position 0." 这是因为发布的数据看起来像这样的字符串(被截断):
%7b%22LogType%22%3a%22Drill%22%2c%22Action%22%3a%22Started%22%2c%22Description%22%3a%22...
在调用Newtonsoft.Json 库对其进行反序列化之前,我尝试将传入的数据从 UTF-8 转换为 ASCII:
byte[] contentBytes = await Request.Content.ReadAsByteArrayAsync();
string postContents = Encoding.ASCII.GetString(Encoding.Convert(Encoding.UTF8, Encoding.ASCII, contentBytes));
但是,JsonReaderException 仍然被抛出,因为 postContents 仍然看起来像这样:
%7b%22LogType%22%3a%22Drill%22%2c%22Action%22%3a%22Started%22%2c%22Description%22%3a%22...
我应该怎么做才能确保远程 Web 服务能够成功反序列化它接收到的数据?
【问题讨论】:
-
我认为您的数据在传输过程中变成了 URL 编码。忘记 ASCII,那只会是另一个问题。
-
The data in postData will be escaped... -
尽可能发布所有相关的 C# 代码、客户端和服务器。
-
Unity 在这里将正文发布为
x-www-form-urlencoded类型并没有帮助,服务器显然不愿意解释。根据我从文档中收集到的信息,您不能使用静态便捷方法,您需要构造一个显式UnityWebRequest实例并将uploadHandler设置为RawUploadHandler实例(假设您不能修改服务器代码来处理表单)。 -
@JeroenMostert 说到 web 请求,Unity 似乎还在 2001 年
标签: c# .net unity3d encoding json.net