I am currently creating a log-in system for a game. I am using ASP.NET MVC Web API 2 to get the data and pass it on to the database. The process is as follows:
Username and other data is written to a WWWForm (Unity3d). Among this data, there is a protobuf-net serialized object passed on to a Convert.ToBase64String like this:
using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize(ms, data); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); }
The data sent (in that particular field) is: CgkKAUMSAWMaAWMaACICIAoqAhAB
The data sent is stored to a MS SQL Server database with column type varbinary after doing Convert.FromBase64String(). That looks like this: 0x0A090A01411201611A01611A002202200A2A021001
The data is sent back (via HTTP Response) as Convert.ToBase64String().
That data looks exactly as before as sending it: CgkKAUMSAWMaAWMaACICIAoqAhAB
Upon receiving the data, this tries to de-serialize it:
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}
However, it fails on the Convert and tells me that the length is not valid, even though the length is 28. What am I doing wrong?
Ooops, I found what was causing the error. Response came as this:
"CgkKAUMSAWMaAWMaACICIAoqAhAB"
I thought it was Unity showing me the response inside quotation marks, but the response actually had quotation marks. So this is the fix: