我使用 Azure 移动服务使用离线同步选项创建。一开始一切都很顺利。我插入了几行,几天后当我尝试在表中插入时回到我的应用程序。我收到的错误消息为
System.ArgumentException: Set JArray values with invalid key value: "version". Int32 array index expected.
at Newtonsoft.Json.Linq.JArray.set_Item (System.Object key, Newtonsoft.Json.Linq.JToken value) [0x00028] in <filename unknown>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceTable.GetJTokenFromResponse (Microsoft.WindowsAzure.MobileServices.MobileServiceHttpResponse response) [0x00035] in <filename unknown>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceTable+<>c__DisplayClass14+<<InsertAsync>b__13>d__16.MoveNext () [0x000f7] in <filename unknown>:0
--- End of stack trace from previous location where exception was thrown ---
我尝试在我的 todoitem.cs 中添加版本属性,如下所示
[Version]
public byte[] Version { get; set; }
或
[TimeStamp]
public byte[] Version { get; set; }
但这两种情况都对我没有帮助。仅当我尝试插入时才会出现错误。读取数据就好了。难道是在等我设定什么吗?我认为它是在新行插入期间自动分配的,仅用于验证服务器和客户端之间数据的行版本。
更新:我更改的是在它工作之后,我将每个操作的架构权限更改为“仅限经过身份验证的用户”,并且还添加了谷歌身份验证,之后无论我做什么,我都会不断收到此错误。我在本地 sqlite 和 azure 上清理了 table ,但它甚至没有帮助。
最佳答案
终于在几乎整整两天的努力中我找到了问题所在。创建 MobileServiceClient 时,我必须在 mobileApiUrl 中使用 https。在我没有在插入和更新上使用任何身份验证之前,这工作得很好,但一旦我添加了谷歌和 Facebook 的身份验证,我就开始收到此错误,尽管读取查询仍在工作。我不知道其背后的原因是什么,但从 http 更改为 https 非常有效。
MobileService = new MobileServiceClient(Url);
关于c# - 使用无效键值设置 JArray 值 : "version". 需要 Int32 数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664576/