.NET Core对接Learning Locker时Actor的mbox字段无法保存问题
问题根因
- xAPI(即TinCan)规范明确要求
mbox字段必须携带mailto:前缀,纯邮箱字符串属于非法格式,会被序列化库或Learning Locker服务端直接丢弃 - 你当前的代码未区分匿名状态,匿名场景下仍会赋值
mbox,若此时UserEmailAddress为空也会导致字段被过滤 - 部分旧版本TinCan .NET SDK在
account和mbox两种逆功能标识(IFI)同时存在时,会默认优先序列化account忽略mbox - 部分Learning Locker实例会配置IFI字段过滤规则,默认丢弃
mbox类型的标识
解决步骤
步骤1:修正mbox赋值逻辑,补充协议前缀和匿名判断
修改代码如下:
public Agent MakeActor(bool anonymous) { return new Agent { name = anonymous ? AnonymousUser : UserName, // 仅非匿名场景赋值mbox,且添加规范要求的mailto前缀 mbox = anonymous ? null : $"mailto:{UserEmailAddress}", account = new AgentAccount { name = anonymous ? AnonymousUser : UserId.ToString(), homePage = new Uri(StringHelper.ResolveHostName(Name,AwsDefines.AwsDomain)) } }; }
如果UserEmailAddress可能为空,可额外增加空值判断,避免赋值无效的空mbox字段。
步骤2:验证SDK序列化结果
提交statement前,将生成的Agent对象序列化为JSON,检查mbox字段是否正常存在:如果序列化结果本身没有mbox,升级你使用的TinCan .NET SDK到最新稳定版即可解决。
步骤3:调整Learning Locker配置
进入Learning Locker管理后台的「xAPI Settings」页面,确认没有开启Restrict IFIs类限制规则,如果有规则,将mbox加入允许的IFI列表即可。
内容的提问来源于stack exchange,提问作者Waleed Naveed
相关产品推荐
相关产品推荐

