Это мой самый первый вопрос после многих лет здесь, поэтому я надеюсь, что не нарушу никаких правил.
В некоторых из методов POST моего ASP.NET Core API я бы хотелразрешить клиентам предоставлять только те свойства, которые они хотят обновить, в теле своего запроса POST.
Вот упрощенная версия моего кода:
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public sealed class FooController : ControllerBase
{
public async Task<IActionResult> UpdateFooAsync(Guid fooGuid, [FromBody]UpdateFooModel model)
{
... Apply updates for specified properties, checking for authorization where needed...
return Ok();
}
}
public sealed class UpdateFooModel
{
[BindProperty] public int? MaxFoo { get; set; }
[BindProperty] public int? MaxBar { get; set; }
}
public sealed class Foo
{
public int? MaxFoo { get; set; }
public int? MaxBar { get; set; }
}
MaxBar и MaxFoo обаобнуляемые целочисленные значения, где нулевое значение означает, что максимума нет.
Я пытаюсь разрешить клиентам отправлять, например, следующую конечную точку:
Установка MaxBar на ноль и установка MaxFoo на 10
{
"maxBar": null,
"maxFoo": 10
}
Установка MaxBar на ноль, не касаясь MaxFoo
{ "maxBar": null }
Обновить MaxBarдо 5, не касаясь MaxFoo
{ "maxBar": 5 }
В моем методе UpdateFooAsync я хочу обновить только свойства, указанные в запросе.
Однако, когдапроисходит связывание модели, задаются неопределенные свойстваt к их значениям по умолчанию (null
для типов, допускающих значение NULL).
Каков наилучший способ выяснить, было ли значение явно установлено в null
(оно должно быть установлено в null
),или просто не присутствовал в запросе (он не должен обновляться)?
Я пытался проверить ModelState
, но он не содержал ключей для «модели», только для напечатанного Guid
параметр.
Любой другой способ решения основной проблемы также приветствуется.
Спасибо!