gpt4 book ai didi

c# - Web Api (MVC 6) Chunked body 没有正确终止 0-sized chunk

转载 作者:太空狗 更新时间:2023-10-29 21:21:49 27 4
gpt4 key购买 nike

我正在使用 MVC 6 rc1 和 EF 7 rc 1 Code First 模型通过 Web API Controller 检索数据。我有 3 个类似于下面的表。

class Product
{
public int Id { get; set; }
public string SomeProperty { get; set; }
public virtual ICollection<Categorization> Categorizations { get; set; }
public DateTime SomeProperty2 { get; set; }
public string SomeProperty3 { get; set; }
public string SomeProperty4 { get; set; }

}

// NOTE: Entity key should be (ProductId, CategoryId)
class Categorization
{
public int ProductId { get; set; }
public Product Product { get; set; }

public int CategoryId { get; set; }
public Category Category { get; set; }
}

class Category
{
public int Id { get; set; }
public ICollection<Categorization> Categorizations { get; set; }
}

我的 Controller :

[ActionName("searchProducts")]
public IEnumerable<Product> searchProducts(string searchText,int? id)
{
var ret= db.Products
.Include(s => s.Categorizations).Take(2).ToList();
return ret;
}

下面是我的 Startup.cs ConfigureServices 部分。

          services.AddMvc()
.AddJsonOptions(options=>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore;
});
services.AddCors();

var connectionString = Configuration.GetSection("Data:DefaultConnection:ConnectionString").Value;

services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ContractsContext>(options => options.UseSqlServer(connectionString));


services.AddSingleton(_ => Configuration);
services.AddSingleton<IContractRepository, ContractRepository>();

当我调用 api 时,我在 Fiddler 中收到错误消息“Chunked body did not terminate properly with 0-sized chunk”。在 fiddler 结果集中,我只看到预期结果集的第一个对象,其属性在分类填充之前没有,之后没有属性和剩余对象(不完整的 JSON 数据)。如果我不在结果集中包含分类,它工作得很好。我错过了什么吗?注意:EF 正在正确返回数据,但它在 api 调用中被分块,客户端无法完整读取数据。

最佳答案

发现问题。检测到类型为“Product”的属性“Product”的自引用循环。路径“[0].Categorizations[0]”。

因此,EF 填充了 Product 对象中的 Categorization 集合以及 Categorization 中的 Product 对象。因此,在序列化为 json 时,它变成了一个无限循环,例如:

产品>分类(eachCategorization - 产品>分类(eachCategorization - 产品>分类(eachCategorization - 产品>分类(....

解决方法:如下更改 Startup.cs ConfigureServices 部分

services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});

关于c# - Web Api (MVC 6) Chunked body 没有正确终止 0-sized chunk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151065/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com