【问题标题】:Ajax Get return ERR_SPDY_PROTOCOL_ERRORAjax 获取返回 ERR_SPDY_PROTOCOL_ERROR
【发布时间】:2017-10-30 18:01:51
【问题描述】:

我正在使用 AspNetCore 中的 web 应用程序,我正在尝试通过 ajax 调用从我的控制器获取数据。

这是我的 API:

[HttpGet]
    public async Task<IActionResult> GetPackWithAllCards(int? packId)
    {
        if (packId == null)
        {
            return Json("An error has occured");
        }
        else
        {
            var pack = await _context.Packs
            .Include(p => p.TagPacks)
            .ThenInclude(tp => tp.Tag)
            .Include(p => p.CardPacks)
            .ThenInclude(cp => cp.Card)
            .ThenInclude(c => c.FaceCards)
            .ThenInclude(fc => fc.Face)
            .ThenInclude(fc => fc.Template)
            .Include(p => p.CardPacks)
            .ThenInclude(cp => cp.Card.FaceCards)
            .ThenInclude(fc => fc.Face.Image)
            .Include(p => p.CardPacks)
            .ThenInclude(cp => cp.Card.FaceCards)
            .ThenInclude(fc => fc.Face.Sound)
            .SingleOrDefaultAsync(m => m.PackId == packId);
            if (pack == null)
            {
                return Json("An error has occured");
            }
            return Ok(pack);
        }
    }

和我的 ajax 调用:

$.get("/pack/GetPackWithAllCards", { packId: pack.packId }, function (pack) {
        alert(pack);
});

我的错误总是一样的,我得到“加载资源失败:net::ERR_SPDY_PROTOCOL_ERROR”,状态 = 0

我的 api 正确返回一个包,但我的 ajax 调用没有得到它。

【问题讨论】:

标签: jquery ajax asp.net-core


【解决方案1】:

这是 JSON 序列化中的错误。请参阅此处的文档https://docs.microsoft.com/en-us/ef/core/querying/related-data#related-data-and-serialization

基于 github:https://github.com/aspnet/EntityFrameworkCore/issues/9573。 我发现它只能部分解决我的问题。删除模型中不必要的引用解决了这个问题。

【讨论】:

  • 链接繁重的答案不适用于本网站,因为它们肯定会腐烂。因此,随着时间的推移,它将变得不那么有用。你能引用相关部分更清楚地解释你的答案吗?
  • 谢谢它解决了我的 ERR_SPDY_PROTOCOL_ERROR 谢谢
【解决方案2】:

我刚刚遇到了这个错误。原因是 JSON 的序列化错误。

检查您的 Packs 类和子类是否具有访问器,如果未填充所有子类,这些访问器可能会创建未设置为实例异常的对象引用。

例子:

public class SaveStatus
{
  public bool Success
  {
    get
    {
      return ValidationErrors.Count == 0;
    }
  }
  public List<ValidationError> ValidationErrors { get; set; }
}

在这种情况下,如果未填充列表 ValidationErrors,则 JSON 将无法序列化触发相关错误的 Success 访问器。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      在我的例子中,它是 Json 引用循环处理: 添加以下修复它:

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
              .AddJsonOptions(o => 
                  o.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
      

      【讨论】:

        猜你喜欢
        • 2018-01-10
        • 2013-02-14
        • 2023-04-02
        • 2017-08-14
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多