【问题标题】:What when user is not passing the complete json to a .NET Web API?当用户没有将完整的 json 传递给 .NET Web API 时怎么办?
【发布时间】:2019-07-10 09:24:03
【问题描述】:

我有一个 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
}

colorhat 两个参数是可选的。 但是当用户传递它时:

{
  "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; }
}

【问题讨论】:

  • 向我们展示MyDataWrapper类。
  • 传递所有属性是否按预期工作?
  • @DavidG 我将 MyDataWrapper 添加到最初的问题中。
  • Required.AllowNull 表示该属性需要存在但允许为空。您可能想使用Required.DefaultRequired.DisallowNull
  • @Fabio 是的,当 json 完成后,一切正常。

标签: c# asp.net .net asp.net-core asp.net-web-api


【解决方案1】:

documentationRequired.AllowNull(强调我的):

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

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

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

【讨论】:

  • 你仍然需要将它传递给控制器​​,要么有值,要么为空!
  • @Saif 使用这些选项中的任何一个都意味着您不需要为这些属性传递值。我不确定你在说什么。
猜你喜欢
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2020-12-19
  • 2020-09-10
  • 2021-12-31
  • 2012-04-16
相关资源
最近更新 更多