当使用垃圾字符重新设置 API 时,Guid 字段设置为空

本文关键字:设置 API Guid 字段 字符 新设置 | 更新日期: 2023-09-27 18:32:54

我有一个托管在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"}

对于上述请求,我可以成功反序列化请求参数。请注意"最终标识符"和"注释"参数的值。

但是,当请求像:

{"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"} 

我也可以成功反序列化此请求,但"最终标识符"参数的值Guid.Empty (00000000-0000-0000-0000-000000000000)。这里请注意第二个请求注释字段中的 Umlet 字符,它是一些德语字符(垃圾字符(。

那么,垃圾字符会影响GUID值吗?但是,还要注意两个请求中"记录标识符"值的值。"记录标识符"没有问题。

那么哪里出了问题呢?

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

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 序列化和反序列化。

当使用垃圾字符重新设置 API 时,Guid 字段设置为空

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

实际上,我正在控制器端检查Guid值。并且正在获得空值。

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

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

在实际 Guid 字段中为 32 个字母数字值和 4 个短划线。但是我在 Guid 值中得到了大约 29 个字符,因为它是请求数据中的最后一个参数,某些部分被截断了。

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

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

有关此问题的更多详细信息,请访问:带有变音符号的 iOS HttpRequest 长度不正确

非常感谢。