Что, когда пользователь не передает полный JSON в .NET Web API? - PullRequest
2 голосов
/ 10 июля 2019

У меня есть конечная точка 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
}

Двапараметр color и hat являются необязательными.Но когда пользователь передает это:

{
  "name": "Heinz"
}

myDataWrapper имеет значение null.

Я попытался:

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

1 Ответ

2 голосов
/ 10 июля 2019

Из документации для Required.AllowNull (выделено мое):

Свойство должно быть определено в JSON, но может иметь нулевое значение.

Вот почему это дает сбой, потому что вы прямо сказали, что свойства должны быть предоставлены. Вы должны переключиться на:

  1. Required.Default - свойство не требуется. Это значение по умолчанию, означающее, что вы можете просто полностью удалить свойство Required.
  2. Required.DisallowNull - свойство не является обязательным, но оно не может быть нулевым значением
...