Введение: Ядро Asp.net получает ваше тело запроса и затем десериализуется в объект типа MyData, а затем вызывает метод в вашем контроллере, передавая объект в качестве параметра. Из объекта myData вы не можете знать, было ли field2 нулевым или не переданным. В обоих случаях свойство будет иметь нулевое значение. Информация, которую вы пытаетесь найти, теряется при десериализации.
Решение: Чтобы выяснить это, вам нужно прочитать тело запроса и проверить тело запроса, если поле было передано илине. В ядре asp.net есть некоторая сложность - чтение тела запроса, как только оно будет прочитано (основной структурой asp.net для создания объекта MyData). Нам нужно перемотать поток запросов и затем прочитать его. Код для этого ниже.
[HttpPost]
public void Post([FromBody] MyData myData)
{
HttpContext.Request.Body.Seek(0, System.IO.SeekOrigin.Begin);
System.IO.StreamReader sr = new System.IO.StreamReader(HttpContext.Request.Body);
var requestBody = sr.ReadToEnd();
//Now check the requestBody if the field was passed using JSON parsing or string manipulation
Console.WriteLine(requestBody);
}
Предупреждение: Хотя это будет работать. То, что вы пытаетесь сделать, снизит читабельность и затруднит работу других разработчиков. Дифференцирование, если значение поля равно нулю или отсутствует в теле запроса, не является обычной практикой.