FromBase64String 无效长度错误

FromBase64String invalid length error

我目前正在为游戏创建登录系统。我正在使用 ASP.NET MVC Web API 2 获取数据并将其传递到数据库。过程如下:

  1. 用户名和其他数据写入 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

  1. 发送的数据在执行 Convert.FromBase64String() 后存储到列类型为 varbinary 的 MS SQL 服务器数据库。看起来像这样:0x0A090A01411201611A01611A002202200A2A021001

  2. 数据作为 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);
}