gpt4 book ai didi

c# - 允许类属性在 WebAPI 2 post 方法中为 null

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:09 26 4
gpt4 key购买 nike

我正在使用两个 POCO 类:

public class GearModel
{
public long Id { get; set; }
public Int16 LocationNumber { get; set; }
public string HooksPerRod { get; set; }
public string TerminalWeightBait { get; set; }
public string TerminalWeight { get; set; }
public FlyModel Shrimps { get; set; }
public FlyModel Worms { get; set; }
public FlyModel Cocahoes { get; set; }
public FlyModel Scampi { get; set; }
}

public class FlyModel
{
public double? Number { get; set; }
public string Color { get; set; }
}

当我尝试发布到我的 API Controller (定义如下)时,它会提示 Null value for non-nullable member. Member: 'Worms'. ,当使用此 cURL 命令发布到它时(我知道 cURL 参数都不是问题,如果我包含所有 FlyModel 属性,它会起作用)。

不工作


curl -X POST -v -H "Content-Type: application/json" --data-ascii "{Assn:102,LocationNumber:1,HooksPerRod:3,TerminalWeightBait:'None',TerminalWeight:'18oz',Shrimps:{Number:0.0,Color:'Pink'}}" <Url Here>

工作


curl -X POST -v -H "Content-Type: application/json" --data-ascii "{Assn:102,LocationNumber:1,HooksPerRod:3,TerminalWeightBait:'None',TerminalWeight:'18oz',Shrimps:{Number:0.0,Color:'Pink'},Worms:{},Cocahoes:{},Scampi:{}}" <Url Here>

所以我的问题是,如何允许 FlyModel 属性(虾、蠕虫等)完全排除在 JSON 之外,就像在不工作的 cURL 命令中一样?

齿轮 Controller


public class GearController : ApiController
{
// POST: api/Gear
[ResponseType(typeof(GearModel))]
public async Task<IHttpActionResult> PostGearModel(GearModel gearModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}

db.Gear.Add(gearModel);
await db.SaveChangesAsync();

return CreatedAtRoute("DefaultApi", new { id = gearModel.Assn }, gearModel);
}
}

最佳答案

我假设您指的是 db.SaveChangesAsync(); 之后的错误,这是由 Entity Framework 造成的,Web Api 不会更改这里的任何东西。发生错误是因为 EF 不允许复杂类型可空性,这意味着您需要在保存之前实例化每个复杂类型Shrimps, Worms... .

您可以在以下位置阅读有关此约定的更多信息:Complex Types of Nullable ValuesComplex Types Nullability Convention

关于c# - 允许类属性在 WebAPI 2 post 方法中为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382144/

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