.NET Core 2.0中System.PlatformNotSupportedException报错求助
问题修复方案
问题根源
你的Login方法返回匿名对象时,permissions = _manager.GetUserPermissions(user.Email)没有添加await关键字,导致实际传递给Ok()的是一个Task<IEnumerable<Permission>>任务对象,而非权限集合本身。由于Task类型实现了ISerializable接口,而.NET Core 2.0中System.Threading.ExecutionContext.GetObjectData方法不支持序列化操作,Newtonsoft.Json尝试序列化这个Task对象时就会抛出PlatformNotSupportedException。
修复步骤
在Login方法中,对GetUserPermissions的调用添加await,确保获取到实际的权限集合:
public async Task<IActionResult> Login([FromBody]AuthRequest itemRequest) { try { var result = await _manager.ValidateUserAsync(itemRequest.Email, itemRequest.Password); if (result.Succeeded) { var user = await _manager.GetUserAsync(itemRequest.Email); return Ok(new { name = user.name, administrator = user.administrator, permissions = await _manager.GetUserPermissions(user.Email) // 添加await关键字 }); } return Unauthorized(); } catch (Exception e) { return StatusCode(500); } }
验证说明
修改后,返回的匿名对象中permissions会是实际的IEnumerable<Permission>集合,Newtonsoft.Json可以正常序列化该集合,不会再触发Task对象的ISerializable序列化逻辑,即可解决报错问题。
内容的提问来源于stack exchange,提问作者asdf31
相关产品推荐
相关产品推荐

