You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC调用JWT认证API反序列化Player模型报错

错误原因

该异常和JWT鉴权逻辑无关——你已经成功拿到200 OK响应,说明令牌传递、鉴权流程是正常的。问题本质是API接口实际返回的数据类型,和你反序列化时指定的目标类型不匹配:

  • 你的API接口虽然声明返回类型为ActionResult<List<Player>>,但Linq查询中加了.Select(p=> p.Name).ToList()投影逻辑,最终实际返回的是List<string>(仅包含玩家姓名字段的字符串数组)
  • MVC端尝试把JSON格式的字符串数组直接反序列化为List<Player>对象数组,Json.NET无法将字符串值自动转换为Player复杂类型,因此抛出类型转换异常。
修复方案

根据你的实际业务需求二选一即可:

方案1:修改API端,返回完整Player对象集合

如果前端需要完整的Player模型字段,去掉API查询中的Name投影,直接返回排序后的Player实体列表即可,MVC端代码无需改动:

[HttpGet]
[Authorize]
public ActionResult<List<Player>> GetAllPlayers()
{
    // 移除Select投影,直接返回Player实体
    var players = _applicationDbContext.Players.OrderBy(p => p.Name).ToList();
    return Ok(players);
}

方案2:修改MVC端反序列化逻辑,适配现有API返回值

如果业务上确实只需要玩家名称,不需要Player的其他字段,无需改动API,调整MVC端的反序列化逻辑即可:

if(response.StatusCode == System.Net.HttpStatusCode.OK)
{
    var strResponse = await response.Content.ReadAsStringAsync();
    // 先按实际返回类型反序列化为字符串列表
    var playerNames = JsonConvert.DeserializeObject<List<string>>(strResponse);
    // 若需要组装为Player模型列表,手动映射字段即可
    players = playerNames.Select(name => new Player { Name = name }).ToList();
}

内容的提问来源于stack exchange,提问作者ahamad zooghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:31:08