我正在使用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调用没有得到它。
答案 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);