当用户未将完整的 json 传递给 .NET Web API 时该怎么办



我有一个POST端点(ASP.NET Web API 2.2(,它需要一个定义的json。

[HttpPost()]
public async Task<IActionResult> SetProcessStart([FromBody]MyDataWrapper myDataWrapper)

MyDataWrapper json包括例如三个参数。

{
  "name": "Heinz",
  "color": "green",
  "hat": false
}

两个参数颜色帽子是可选的。但是当用户传递它时:

{
  "name": "Heinz"
}

myDataWrapper 为空。

我试过了:

public async Task<IActionResult> SetProcessStart([FromBody]object myObject)
MyDataWrapper myDataWrapper = (MyDataWrapper)object;

但它不起作用。

如何采用短 json 并将其转换为我的 MyDataWrapper 对象?

public class MyDataWrapper
{
    [JsonProperty("name", Required = Required.Always)]
    public string Name { get; set; }
    [JsonProperty("color", Required = Required.AllowNull)]
    public string Color { get; set; }
    [JsonProperty("hat", Required = Required.AllowNull)]
    public bool Hat { get; set; }
}

来自Required.AllowNull的文档(强调我的(:

该属性必须在 JSON 中定义,但可以是空值。

这就是它失败的原因,因为您已经明确表示需要提供属性。您应该切换到以下任一:

  1. Required.Default - 该属性不是必需的。这是默认值,这意味着您可以完全删除Required属性。
  2. Required.DisallowNull - 该属性不是必需的,但它不能为 null 值

最新更新