1

我在 IIS 服务器上托管了一个 API。

我正在使用以下参数向 URI 发出请求。

{"CurrentTime":"2013-09-23 13:05:52",
"Measurement":[{"Comment":"Test Comment","RecordIdentifier":"7F54BF3C-6022-423B-8B8F-0121BA2AF516"}],
"Source":"ABC","Destination":"XYZ",
"FinalIdentifier":"058B5913-FAB9-4641-B02E-2729A02B5059"}

对于上述请求,我可以成功反序列化请求参数。注意“FinalIdentifier”和“Comment”参数的值。

但是,当请求像:

{"CurrentTime":"2013-09-23 13:05:52",
"Measurement":[{"Comment":"Âëīö","RecordIdentifier":"01CEBEAE-B99D-47B1-9C2D-1CB80069917B"}],
"Source":"ABC","Destination":"XYZ",
"FinalIdentifier":"058B5913-FAB9-4641-B02E-2729A02B5059"} 

我也可以成功反序列化此请求,但“FinalIdentifier”参数的值正在获取Guid.Empty (00000000-0000-0000-0000-000000000000)。这里注意第二个请求评论字段中的 Umlet 字符,它是一些德语字符(垃圾字符)。

那么,垃圾字符会影响GUID价值吗?但是,还要注意两个请求中“RecordIdentifier”值的值。“RecordIdentifier”没有问题。

那么问题出在哪里?

我有下面的请求和解析实体。

public class Measurement
{
    public string Comment { get; set; }
    public Guid RecordIdentifier { get; set; }
}
public class MeasurentEntityMain
{
    public List<Measurement> measurement { get; set; }
    public Guid FinalIdentifier { get; set; }
    public string Source { get; set; }
    public string Destination { get; set; }
}

以上两个请求我都从提琴手那里捕获。在 API 方面,我已经通过调试对其进行了测试。

那么,为什么这个 Guid 字段设置为空字段。

我正在使用 JSON 序列化和反序列化。

4

1 回答 1

0

我找到了上述问题的解决方案。

实际上我在控制器端检查 Guid 值。并获得 Empty 价值。

我在我的 API 端创建了一个 HTTPhandler。该处理程序在路由时处理每个请求,然后将请求转发到相应的 APIController。

我在处理程序方面注意到,对于带有一些变音字符的请求,请求的数据的某些部分被截断。

在 Real Guid 字段中有 32 个字母数字值和 4 个破折号。但是我在 Guid Value 中得到了大约 29 个字符,因为它是请求数据中的最后一个参数,某些部分被截断了。

当谷歌搜索更多时,我发现具有 Length 函数的 Umlaut 字符返回长度 = 2。

因此,对于 3 个元音变字符,请求数据中的 3 个字符被截断,因为我正在使用 UTF8ENCODING,然后将其转换为具有原始字符串长度的字节数据。

有关此问题的更多详细信息,请访问: iOS HttpRequest with umlaut has wrong length

非常感谢。

于 2013-10-09T10:57:07.347 回答