Ajax获取返回ERR_SPDY_PROTOCOL_ERROR

时间:2017-05-30 10:05:01

标签: jquery ajax asp.net-core

我正在使用AspNetCore中的webapp,我正试图通过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调用没有得到它。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

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

检查您的Packs类和子类是否具有访问器,如果未填充所有子类,则可以创建未设置为实例异常的Object引用。

示例:

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

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

答案 2 :(得分:0)

答案 3 :(得分:0)

在我的情况下是Json参考循环处理: 添加以下修复程序:

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