public sealed record CreateUserRequest(string Password)
{
private readonly string _userName;
public required string UserName
{
get => _userName;
[MemberNotNull(nameof(_userName))]
init => _userName = value.Trim();
}
// … other properties …
}
< /code>
Я ожидаю немедленного сбоя модели (создать HTTP400), если клиент подает: < /p>
[list]
[*]"UserName": null
, or
[*]entirely omits the UserName field
[/list]
That is, behave exactly as it does when you try to bind a non‑nullable value type (e.g. sending "Age": "foo" for an int Age). What I've Попробовал < /strong> < /p>
Отсутствует или null для конструкторов-связанных свойств (например, coder (например, Codeer-byfult
Нет необходимости преобразовать все DTO в записи, связанные с конструктором < /li>
Работает как для отсутствующих, так и для нулевых для некалеваемых справочных свойств < /li>
< /ul>
>
[b] фон [/b] У меня есть проект ASP.net Core 9 Web API с включенным [Nullable Retable Types] ([code]enable[/code]). В моем запросе dtos я объявляю определенные свойства как невидимые, например: < /p> [code]public sealed record CreateUserRequest(string Password) { private readonly string _userName;
public required string UserName { get => _userName; [MemberNotNull(nameof(_userName))] init => _userName = value.Trim(); }
// … other properties … } < /code> Я ожидаю немедленного сбоя модели (создать HTTP400), если клиент подает: < /p> [list] [*]"UserName": null[/code], or [*]entirely omits the UserName field [/list] That is, behave exactly as it does when you try to bind a non‑nullable value type (e.g. sending "Age": "foo" for an int Age). [b]What I've Попробовал < /strong> < /p> [list] [*] [code][ApiController][/code] на моем контроллере
[*] Global Mvc config in program.cs : [code]services.AddControllers(opts => { // ensure non-nullable reference types are treated as [Required] opts.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = false; }) .AddJsonOptions(opts => { // JSON 9 flags opts.JsonSerializerOptions.RespectNullableAnnotations = true; opts.JsonSerializerOptions.RespectRequiredConstructorParameters = true; }); [/code]
[*] проверял, что:
Отсутствует или null для конструкторов-связанных свойств (например, coder (например, Codeer-byfult Нет необходимости преобразовать все DTO в записи, связанные с конструктором < /li> Работает как для отсутствующих, так и для нулевых для некалеваемых справочных свойств < /li> < /ul> >