FromBase64String 无效长度错误
FromBase64String invalid length error
我目前正在为游戏创建登录系统。我正在使用 ASP.NET MVC Web API 2 获取数据并将其传递到数据库。过程如下:
用户名和其他数据写入 WWWForm (Unity3d)。在这些数据中,有一个 protobuf-net 序列化对象传递给 Convert.ToBase64String,如下所示:
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize(ms, data);
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
发送的数据(在该特定字段中)是:CgkKAUMSAWMaAWMaACICIAoqAhAB
发送的数据在执行 Convert.FromBase64String() 后存储到列类型为 varbinary 的 MS SQL 服务器数据库。看起来像这样:0x0A090A01411201611A01611A002202200A2A021001
数据作为 Convert.ToBase64String() 发回(通过 HTTP 响应)。
该数据看起来与发送前完全一样:CgkKAUMSAWMaAWMaACICIAoqAhAB
收到数据后,这会尝试对其进行反序列化:
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}
但是,转换失败并告诉我长度无效,即使长度是 28。我做错了什么?
糟糕,我找到了导致错误的原因。响应是这样的:
"CgkKAUMSAWMaAWMaACICIAoqAhAB"
我以为是 Unity 向我显示引号内的响应,但响应实际上有引号。所以这是修复:
serverResponse = serverResponse.Replace("\"", "");
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}
我目前正在为游戏创建登录系统。我正在使用 ASP.NET MVC Web API 2 获取数据并将其传递到数据库。过程如下:
用户名和其他数据写入 WWWForm (Unity3d)。在这些数据中,有一个 protobuf-net 序列化对象传递给 Convert.ToBase64String,如下所示:
using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize(ms, data); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); }
发送的数据(在该特定字段中)是:CgkKAUMSAWMaAWMaACICIAoqAhAB
发送的数据在执行 Convert.FromBase64String() 后存储到列类型为 varbinary 的 MS SQL 服务器数据库。看起来像这样:0x0A090A01411201611A01611A002202200A2A021001
数据作为 Convert.ToBase64String() 发回(通过 HTTP 响应)。
该数据看起来与发送前完全一样:CgkKAUMSAWMaAWMaACICIAoqAhAB
收到数据后,这会尝试对其进行反序列化:
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}
但是,转换失败并告诉我长度无效,即使长度是 28。我做错了什么?
糟糕,我找到了导致错误的原因。响应是这样的:
"CgkKAUMSAWMaAWMaACICIAoqAhAB"
我以为是 Unity 向我显示引号内的响应,但响应实际上有引号。所以这是修复:
serverResponse = serverResponse.Replace("\"", "");
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}